С помощью чего можно добиться такого же качества картинок, как при предпросмотре vkontakte.ru (не adv)?
Я использую библиотеку GD.
Качество изображения вконтакте:
Качественные картинки по моему сценарию:
Большое фото: Ссылка
На всей этой фотографии вконтакте с лучшим качеством весит 7Кб, а мои 16К ...
Мой скрипт:
<?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);
}
На самом деле необходимо решить две проблемы.Сделайте лучшее качество и уменьшите размер предварительного просмотра.