Проблема с передискретизацией изображения PHP

Когда я передискретизирую jpg, чтобы нарисовать границу вокруг изображения, качество изображения ужасно снижается, и получается jpeg очень низкого качества. введите описание изображения здесь

Вот мой код:

function addBorderpng($add,$bdr=0,$color='#000000'){
                $arr = explode('.', $add);
                $extension = strtolower(end($arr));
                $border=$bdr;

$im=imagecreatefromjpeg($add);

                $width=imagesx($im);
                $height=imagesy($im);
                $img_adj_width=$width+(2*$border);
                $img_adj_height=$height+(2*$border);
                $newimage=imagecreatetruecolor($img_adj_width,$img_adj_height);

                imageantialias($newimage, true);
                $color_gb_temp =HexToRGB($color);
                $border_color = imagecolorallocate($newimage, $color_gb_temp['r'], $color_gb_temp['g'], $color_gb_temp['b']);
                imagefilledrectangle($newimage,0,0,$img_adj_width,$img_adj_height,$border_color);
                imagealphablending($newimage, true);
                imageantialias($newimage, true);
                     imagecopyresized($newimage,$im,$border,$border,0,0,$width,$height,$width,$height);
                    imagejpeg($newimage,$add,9);
            }

person Shahid Karimi    schedule 11.03.2011    source источник


Ответы (2)


Последний аргумент в пользу imagejpeg - качество.

качество не является обязательным и варьируется от 0 (худшее качество, файл меньшего размера) до 100 (лучшее качество, самый большой файл). По умолчанию используется значение качества IJG по умолчанию (около 75).

Вы устанавливаете его на 9, следовательно, качество низкое.

person Jacob    schedule 11.03.2011

Кроме того, вы можете попробовать «imagecopyresampled» вместо «imagecopyresized», который обрабатывает интерполяцию PHP imagecopyresampled

person awats    schedule 17.03.2011