Тип ресайза изображений (PHP)
Меняю размер изображений, для представления их в виде превью. Все замечательно, но есть одно НО. При изменении изображений, на которых есть текст или тонкие, контрастные линии, оно получается несколько «пожеванным». Как я понимаю, это происходит из-за типа метода, которым меняется размер изображения. Хотелось бы знать, можно ли его изменить?
Для ресайза пользую GD
в частности ImageCopyResized
Код:
<?
/*=============================================
Script name: IMAG.PHP
Author: Vaganov Igor aka Zmevius
About Script: Скрипт уменьшения изображения !!
полезная весчь для новотсных движков
сайтов знакомств, фотогалерей и т.п.
==============================================*/
//=====| Minimum size of output image |=====//
$Min_width2 = 128;
$Min_height2 = 192;
$imag1 = imagecreatefromjpeg("tmp.jpg");
//=====| Берём размеры изображения, которое нужно уменьшить |=====//
$width2 = $width = imagesx($imag1);
$height2 = $height = imagesy($imag1);
//=====| Size of output image |=====//
if ($width > $height) {
while ($width2 >= $Min_width2) {
$width2 = $width2/2;
$height2 = $height2/2;
}
} else {
while ($height2 >= $Min_height2) {
$width2 = $width2/2;
$height2 = $height2/2;
}
}
$imag2 = imagecreatetruecolor($width2, $height2);
imagecopyresampled($imag2, $imag1, 0, 0, 0, 0, $width2, $height2, $width, $height);
imagepng($imag2);
header("Content-type: image/jpg");
?>
/*=============================================
Script name: IMAG.PHP
Author: Vaganov Igor aka Zmevius
About Script: Скрипт уменьшения изображения !!
полезная весчь для новотсных движков
сайтов знакомств, фотогалерей и т.п.
==============================================*/
//=====| Minimum size of output image |=====//
$Min_width2 = 128;
$Min_height2 = 192;
$imag1 = imagecreatefromjpeg("tmp.jpg");
//=====| Берём размеры изображения, которое нужно уменьшить |=====//
$width2 = $width = imagesx($imag1);
$height2 = $height = imagesy($imag1);
//=====| Size of output image |=====//
if ($width > $height) {
while ($width2 >= $Min_width2) {
$width2 = $width2/2;
$height2 = $height2/2;
}
} else {
while ($height2 >= $Min_height2) {
$width2 = $width2/2;
$height2 = $height2/2;
}
}
$imag2 = imagecreatetruecolor($width2, $height2);
imagecopyresampled($imag2, $imag1, 0, 0, 0, 0, $width2, $height2, $width, $height);
imagepng($imag2);
header("Content-type: image/jpg");
?>
А вот моя статья трёхлетней давности: http://www.codenet.ru/webmast/php/Image-Resize-GD/ (и рабочие примеры http://foxweb.net.ru/test/resize_class/)
знаю я как ресайзить, знаю и про imagecopyresampled(), вопрос в другом..
попробуйте создать изображение с темным фоном и белыми буквами на нем. точнее даже с мелким текстом и заресайзить его. Так вот, получается что кусок букв «съедаются», а те что остаются получаются как мелкие, яркие пиксели...
в том же фотошопе, есть несколько способов изменения размера изображения, при некоторых получается так же, при других - нет... так вот вопрос в чем.. тот ресайз, что в GD он единственный?? или есть в этой библиотеке и другие методы?
вообщем-то проблема чисто эстетического качества =)
А ты выводишь JPG, GIF или PNG? Может качество сжатия у JPG не шибко и портит артефактами изображение?
Не вижу проблемы в том, чтобы заменить ImageCopyResized на imagecopyresampled() если не нравятся искажения. В противном случае юзаем ImageMagick. Больше тут имхо не о чем флудить.
Цитата: mfender
А ты выводишь JPG, GIF или PNG? Может качество сжатия у JPG не шибко и портит артефактами изображение?
JPG, качество исходников пробовал разное. В итоге ставлю 100.
Цитата: Xupypr
1. Какого размера был исходник? фотошоп тоже не всемогущ
2. Можно начинать холивар вин версус лин, :) по мощи фотошопа в лине я не встречал, а если и есть то наверняка плтные