Intereting Posts
Как использовать Imagick для слияния и маскировки изображений? php часовой пояс «Etc / GMT + 5» эквивалентен UTC («Etc / UTC + 5»?) Получение недопустимых символов в методе get_browser () выполняется в php Драйвер CodeIgniter PDO использует запрос вместо подготовки? Разве это не менее безопасно? Границы страницы TCPDF? Простое шифрование в PHP Модель Observer, не работающая для обновления? Можете ли вы повторно заполнить входы файлов после неудачной отправки формы с помощью PHP или JavaScript? Facebook Pagetab App – пользователи очень понравились Выделите фрагмент кода HTML с соответствующим текстом Вводит ли пользователь вход в контроллер или модель? Почему я не могу отключить переменную в цикле `foreach`? Как изменить дату mysql на «Аго» в php Редактирование формы для отношения n: m с дополнительными атрибутами между двумя объектами Как сохранить изображение, созданное функцией imagecreatefromstring ()?

как я могу использовать imagick в php? (изменение размера и урожая)

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

Я думал изменить размер изображения, а затем обрезать его. Кроме того, мне нужно сохранить соотношение размеров изображения.

Ниже приведен сценарий php, который я использую для урожая:

$im = new imagick( "img/20130815233205-8.jpg" ); $im->cropThumbnailImage( 80, 80 ); $im->writeImage( "thumb/th_80x80_test.jpg" ); echo '<img src="thumb/th_80x80_test.jpg">'; 

Благодаря..

Solutions Collecting From Web of "как я могу использовать imagick в php? (изменение размера и урожая)"

Эта задача непростая, так как «важная» часть может не всегда находиться в одном месте. Тем не менее, используя что-то вроде этого

 $im = new imagick("c:\\temp\\523764_169105429888246_1540489537_n.jpg"); $imageprops = $im->getImageGeometry(); $width = $imageprops['width']; $height = $imageprops['height']; if($width > $height){ $newHeight = 80; $newWidth = (80 / $height) * $width; }else{ $newWidth = 80; $newHeight = (80 / $width) * $height; } $im->resizeImage($newWidth,$newHeight, imagick::FILTER_LANCZOS, 0.9, true); $im->cropImage (80,80,0,0); $im->writeImage( "D:\\xampp\\htdocs\\th_80x80_test.jpg" ); echo '<img src="th_80x80_test.jpg">'; 

(Проверено)

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

Основываясь на ответе Мартина, я сделал более общую функцию, которая изменяет размеры и Imagick изображение Imagick чтобы он соответствовал заданной ширине и высоте (т. Е. Ведет себя точно так же, как background-size: cover CSS background-size: cover объявление background-size: cover ):

 /** * Resizes and crops $image to fit provided $width and $height. * * @param \Imagick $image * Image to change. * @param int $width * New desired width. * @param int $height * New desired height. */ function image_cover(Imagick $image, $width, $height) { $ratio = $width / $height; // Original image dimensions. $old_width = $image->getImageWidth(); $old_height = $image->getImageHeight(); $old_ratio = $old_width / $old_height; // Determine new image dimensions to scale to. // Also determine cropping coordinates. if ($ratio > $old_ratio) { $new_width = $width; $new_height = $width / $old_width * $old_height; $crop_x = 0; $crop_y = intval(($new_height - $height) / 2); } else { $new_width = $height / $old_height * $old_width; $new_height = $height; $crop_x = intval(($new_width - $width) / 2); $crop_y = 0; } // Scale image to fit minimal of provided dimensions. $image->resizeImage($new_width, $new_height, imagick::FILTER_LANCZOS, 0.9, true); // Now crop image to exactly fit provided dimensions. $image->cropImage($new_width, $new_height, $crop_x, $crop_y); } 

Надеюсь, это может помочь кому-то.