借助与预览vkontakte.ru(不是adv)相同质量的图片可以实现的帮助?
我使用的是GD。
图像质量vkontakte:
我的剧本的优质图片:
大照片:Link
在所有这张照片中,质量最好的vkontakte重7Kb,而我的16K ......
我的剧本:
<?php
function _makeThumbnail($image, $dest, $ext)
{
$imageType = exif_imagetype($image);
switch ($imageType)
{
case IMAGETYPE_JPEG:
$img = imagecreatefromjpeg($image);
break;
case IMAGETYPE_PNG:
$img = imagecreatefrompng($image);
break;
case IMAGETYPE_GIF:
$img = imagecreatefromgif($image);
break;
default:
throw new Exception('Bad extension');
}
$width = imagesx($img);
$height = imagesy($img);
list($widthX, $heightX) = array('130', '130');
if ($width > $widthX || $height > $heightX)
{
if ($height > $width)
{
$ratio = $heightX / $height;
$newHeight = $heightX;
$newWidth = $width * $ratio;
}
else
{
$ratio = $widthX / $width;
$newWidth = $widthX;
$newHeight = $height * $ratio;
}
$previewImg = imagecreatetruecolor($newWidth, $newHeight);
$palsize = ImageColorsTotal($img);
for ($i = 0; $i < $palsize; $i++)
{
$colors = ImageColorsForIndex($img, $i);
ImageColorAllocate($previewImg, $colors['red'], $colors['green'], $colors['blue']);
}
imagecopyresized($previewImg, $img, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
$name = $dest;
switch ($imageType)
{
case IMAGETYPE_JPEG:
imagejpeg($previewImg, $name . '.' . $ext, 100);
break;
case IMAGETYPE_PNG:
imagesavealpha($previewImg, true);
imagepng($previewImg, $name . '.' . $ext, 9);
case IMAGETYPE_GIF:
imagegif($previewImg, $name . '.' . $ext);
break;
default:
throw new Exception();
}
}
imagedestroy($previewImg);
imagedestroy($img);
}
实际上有必要解决两个问题。 提高质量,从而减小预览的大小。
答案 0 :(得分:4)
使用imagecopyresampled()
代替imagecopyresized()
通常可以解决严重问题。
也就是说,根据任何标准,GD的JPG压缩都不是很好。在图像质量与文件大小方面,它远不及Photoshop出色的导出过滤器。 ImageMagick往往会略微好一点 - 如果良好的压缩非常重要,那么可能值得一看。
答案 1 :(得分:0)
@Pekka是正确的,至于第二个问题,您可以使用imagejpeg($img, $filename, $quality)
来优化缩略图。
here是一个指南和一些示例,以帮助您解决这个问题。