Imagemagick изменяет размер изображения динамически

Я создал приложение, где пользователь может загрузить изображение и выбрать регион для обрезки. После этого изображение должно быть изменено и обрезано с выбранными координатами.

Проблема заключается в том, что эти изображения печатаются впоследствии, поэтому качество должно быть максимально приближено к исходному изображению (без артефактов или видимого размытия).

В любом случае изменение размера приводит к потере качества, а использование unsharpmask () после изменения размера делает его намного лучше, но оно все равно отличается от изображения к изображению.

Ох, а иногда цвета даже не совпадают с оригиналом 🙁

Я знаю, что параметры этой функции зависят от таких вещей, как размер и насыщенность изображения, но есть ли способ рассчитать лучшие параметры?

Вот что у меня так далеко:

 $origPath = "ThePathToTheFileOnTheServer.jpg";

move_uploaded_file( $_FILES['imagefile']['tmp_name'],$origPath);

$img = new Imagick();

$file_handle_for_viewing_image = fopen($origPath, 'a+');

$img->readImageFile($file_handle_for_viewing_image);

fclose($file_handle_for_viewing_image);

$img->setImageFormat('jpg');
$img->setImageCompression(Imagick::COMPRESSION_JPEG);
$img->setImageCompressionQuality(100);
$img->resizeImage ( 0, $targ_h,  Imagick::FILTER_LANCZOS, 1);
$img->unsharpMaskImage(0 , 0.5 , 1 , 0.05);
$img->cropImage($targ_w, $targ_h, $xPos, 0);

$newimg = new Imagick();
$newimg->newImage($targ_w,$targ_h,new ImagickPixel('white'));
$newimg->setImageFormat('jpg');
$newimg->setImageCompression(Imagick::COMPRESSION_JPEG);
$newimg->setImageCompressionQuality(100);
$newimg->compositeImage($img,Imagick::COMPOSITE_OVER,0,0);
$newimg->writeImage("TheNewImage.jpg");

Он делает то, что должен, но могу ли я как-то вычислить параметры $ img-> unsharpMaskImage (0, 0.5, 1, 0.05); исправить текущее изображение?

Спасибо за вашу помощь!

Вот пример:

оригинал:

оригинал

после изменения размера:

после изменения размера

1

Решение

Вы можете попробовать изменить размер в Lab цветное пространство, а затем преобразование обратно в sRGB. В командной строке это будет

convert input.jpg -colorspace Lab -resize ... -colorspace sRGB result.jpg
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]