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

1

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

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

В любом случае изменение размера приводит к потере качества и использованию 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); исправить текущее изображение?

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

Вот пример:

оригинал:

Изображение 174551

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

Изображение 174551

Теги:
imagemagick
image-resizing
image-manipulation

1 ответ

0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню