【问题标题】:Retrieving external image and saving locally results in distorted image检索外部图像并在本地保存会导致图像失真
【发布时间】:2015-07-13 10:40:39
【问题描述】:

坚持这个。我在下面有这个函数,它只需要 $ImageSrc 这是来自任何地方的外部图像,例如 imgur,然后将其保存在本地(这不是刮板,我允许人们将图像附加到他们的个人资料中)

public function UploadScreenshot($ImageSrc, $Title, $Description = false) {
    $RandomName = substr(md5($Title . time()), 0, 20);
    $UploadDir = "/home/vanrust/public_html/Screenshots/";

    $file = pathinfo($ImageSrc);
    $ext = $file["extension"];
    if (!in_array($ext, array('jpg','png','bmp','jpeg'))) return array("error" => "Invalid File Type");

    $RandomName = "{$RandomName}.{$ext}";
    $image = file_get_contents($ImageSrc);
    file_put_contents($UploadDir . $RandomName, $image);
}

文件的结果不管是什么都无法识别。

图片:

UploadScreenshot() 检索后:

【问题讨论】:

  • 文件传输后的长度是否相同?如果您查看十六进制的前 100 个字节会发生什么 - 它看起来像图像标题吗?

标签: php image-processing


【解决方案1】:

尝试使用 rename() 将原始文件移动到新位置并重命名。

$file = pathinfo($ImageSrc);
$ext = $file["extension"];
if (!in_array($ext, array('jpg','png','bmp','jpeg'))) return array("error" => "Invalid File Type");

$RandomName = "{$RandomName}.{$ext}";
rename($UploadDir . $RandomName, $ImageSrc);

}

或者,如果您的 $ImageSrc 确实包含有效的上传文件(意味着它是通过 PHP 的 HTTP POST 上传机制上传的),您可以使用 move_uploaded_file()

file_put_contents() 需要谨慎使用。文件开头或结尾的单个偏移量(二进制代码)将显着改变图片。它需要在最后进行验证才能比较两个文件的字节数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    相关资源
    最近更新 更多