Я создаю миниатюры для менеджера цифровых активов, что лучший способ сделать это с помощью imagemagick?
есть ли там хороший ресурс?
Я решил это и поделюсь с МИРОМ! он преобразует .ai, .psd, .jpg, .png, .gif в миниатюры.
Вот функция, которая принимает 4 параметра:
$ dir – каталог для сохранения.
$ tmpName – имя для имени файла, за исключением расширения.
$ fileType – сам по себе пояснительный.
$ size – Большой или маленький.
function thumbGenerator($dir,$tmpName,$fileType,$size){ $saveFileType = "png"; $imagePath = $dir.$tmpName.".".$fileType; $image = new Imagick(); $image->readimage($imagePath); if($fileType == "psd"){ $image->setIteratorIndex(0); } $dimensions = $image->getImageGeometry(); $width = $dimensions['width']; $height = $dimensions['height']; if($size == "large"){ $maxWidth = 720; $maxHeight =720; } if($size == "small"){ $maxWidth = 250; $maxHeight =250; } if($height > $width){ //Portrait if($height > $maxHeight) $image->thumbnailImage(0, $maxHeight); $dimensions = $image->getImageGeometry(); if($dimensions['width'] > $maxWidth){ $image->thumbnailImage($maxWidth, 0); } }elseif($height < $width){ //Landscape $image->thumbnailImage($maxWidth, 0); }else{ //square $image->thumbnailImage($maxWidth, 0); } if($size == "large"){ $image->writeImage($dir . $tmpName."-lg.".$saveFileType); } if($size == "small"){ $image->writeImage($dir . $tmpName."-sm.".$saveFileType);; } }
@Jason – Спасибо, что поделился. Вот несколько советов для более чистого и удобного обслуживания / расширения кода. Опять же, многое зависит от ваших требований. Кроме того, я действительно не запускал этот код, поэтому прошу простить любые опечатки.
$ dir – каталог для сохранения.
$ tmpName – имя для имени файла, за исключением расширения.
$ fileType – сам по себе пояснительный.
$ size – Большой или маленький. Вы можете рассмотреть возможность выбора значения ширины пикселя для эскиза, а не строки для предопределенной ширины. Предположим, что в будущем вам понадобится большая миниатюра в новом разделе вашей страницы (т.е. значки готовой сетки с 500 пикселями для «маленьких» миниатюр). Вы должны предпочтительно определять размер в новой части кода, а не в общей функции thumbGenerator
function thumbGenerator($dir,$tmpName,$fileType,$size){ $saveFileType = "png"; $imagePath = $dir.$tmpName.".".$fileType; $image = new Imagick(); $image->readimage($imagePath); if($fileType == "psd"){ $image->setIteratorIndex(0); } /* Simplify this code section below $dimensions = $image->getImageGeometry(); $width = $dimensions['width']; $height = $dimensions['height']; */ list($width,$height) = $image->getImageGeometry(); // <--- new code /* Use $size for the pixel width/height instead and remove the code below if($size == "large"){ $maxWidth = 720; $maxHeight =720; } if($size == "small"){ $maxWidth = 250; $maxHeight =250; } */ if($height > $width){ //Portrait if($height > $size) $image->thumbnailImage(0, $size); $dimensions = $image->getImageGeometry(); if($width > $size){ // <--- use the previously created $width variable $image->thumbnailImage($size, 0); } /* Don't need this duplicate code. }elseif($height < $width){ //Landscape $image->thumbnailImage($maxWidth, 0); */ }else{ // square or landscape $image->thumbnailImage($maxWidth, 0); } /* DRY - do not repeat yourself - Simplify it and use the pixel width in the image name if($size == "large"){ $image->writeImage($dir . $tmpName."-lg.".$saveFileType); } if($size == "small"){ $image->writeImage($dir . $tmpName."-sm.".$saveFileType);; } */ $image->writeImage($dir . $tmpName."-".$size.".".$saveFileType);; }