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

标签 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

最佳答案

尝试使用 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);

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

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

关于php - 检索外部图像并在本地保存会导致图像失真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30023457/

相关文章:

php - 如何在没有Flash的情况下从网站上录制用户的声音?

php - 将 Doctrine native 查询映射到无实体模型类

php - 如何在 Laravel Eloquent 中对同一个表进行子查询

matlab - 如何在 MATLAB 中对索引图像使用 graythresh?

opencv - OpenCL无法使用OpenCV检测我的AMD GPU

php - 如何使用PHP获取假期日期

php - 类 OCI-Lob 的对象无法转换为字符串

java - 如何高效遍历Bitmap?

opencv - 如何消除给定图像中的噪点,以使ocr输出完美?

matlab - 用于图像处理的非线性滤波器 - 在掩码内寻找最小值