【发布时间】:2016-04-13 17:31:34
【问题描述】:
将图片上传到我的网站后,正在调整图片大小。我正在使用imagecreatefromjpeg 和imagecopyresampled 函数。我注意到颜色与原始图像中的颜色不同。
在这里您可以看到不同之处。您可以从我的网站上看到具有正确颜色的闪烁图像和图像背后的图像。
原图:https://c2.staticflickr.com/6/5754/23693488109_74c67f012a_k.jpg
调整大小后: https://www.isrart.co.il/img/uploads/art/viewer/big/photo-2b971e861c7aa2c57b8f7667ec666c3d.jpg
这是我的 PHP 代码:
$type = @getImageSize($_FILES['photo']['tmp_name'])[2];
switch ($type) {
case 1 :
$img = imageCreateFromGif($_FILES['photo']['tmp_name']);
break;
case 2 :
$img = imageCreateFromJpeg($_FILES['photo']['tmp_name']);
break;
case 3 :
$img = imageCreateFromPng($_FILES['photo']['tmp_name']);
break;
case 6 :
$img = imageCreateFromBmp($_FILES['photo']['tmp_name']);
break;
}
$orig_width = imagesx($img);
if($orig_width < $width)
return $img;
$orig_height = imagesy($img);
$height = (($orig_height * $width) / $orig_width);
$new_image = imagecreatetruecolor($width, $height);
imagecopyresampled($new_image, $img, 0, 0, 0, 0, $width, $height, $orig_width, $orig_height);
imagejpeg($new_image, $_SERVER['DOCUMENT_ROOT'] . "/img/uploads/" . $path, 100);
【问题讨论】:
-
你去看看 cmets 吧,它可能会有所帮助php.net/manual/en/function.imagecreatefromjpeg.php
-
请发布实际的原始图像和重新采样的图像 - 而不是它们的图片。
-
@zod 有没有让你印象深刻的?我从手册页浏览了 cmets,但只有几个可能与此问题相关,而且大多数都已使用多年,以至于它们的持续有效性值得怀疑。
-
这是因为压缩 - 即使在 100% 质量下,由于 jpeg 的工作方式,它也会通过压缩 - 它们不是无损的。 stackoverflow.com/questions/2345605/… - 请查看此线程。您应该考虑为此迁移到 PNG,因为 PNG 是一种无损格式。您也可以查看stackoverflow.com/questions/7421200/… 了解更多详情。