检索外部图像并在本地保存会导致图像失真

时间:2015-05-04 05:58:35

标签: php image-processing

坚持这一个。我在下面有这个函数,它只需要$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);
}

无论什么都无法识别,文件的结果。

图片:

enter image description here

UploadScreenshot()检索后:

The result of the above script regardless of image url

1 个答案:

答案 0 :(得分:0)

尝试使用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()。文件开头或结尾的单个偏移(二进制代码)将显着改变图像。它需要在最后验证以比较两个文件字节。