坚持这一点。我在下面有这个函数,它简单地获取 $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() 检索到它之后:
最佳答案
尝试使用 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/