John
John

Reputation: 1

padding images using php imagick

I need to create square images with no image loss. I found a tool that does the job as a bash script using ImageMagick but can never seem to be able to do it with php Imagick.

The script I found is called squareup from http://www.fmwconcepts.com/imagemagick/squareup/index.php

My code looks like this currently:

$image = new Imagick($srcimage);
$image->setCompressionQuality(100);
if ($image->getImageHeight() <= $image->getImageWidth()) 
  $image->resizeImage($maxsize, 0, Imagick::FILTER_MITCHELL, 1);
else 
  $image->resizeImage(0, $maxsize, Imagick::FILTER_MITCHELL, 1);

$h=$image->getImageHeight();
$w=$image->getimagewidth();
$hlarge=0;
$wlarge=0;
if ($w>$h) {
  $diff=intval(($w-$h)/2);
  $wlarge=1;
  $h=$w;
} else {
  $diff=intval(($h-$w)/2);
  $w=$h;
  $hlarge=1;
}
$newimage = new Imagick();
if ($image->getImageColorspace() == Imagick::COLORSPACE_CMYK) {
  $fg="cmyk(0,0,0,0)";
  $fg_pixel=new ImagickPixel($fg);
  $newimage->newImage($w, $h, $fg_pixel);
  $newimage->setImageColorspace(Imagick::COLORSPACE_CMYK);
} else {
  $newimage->newImage($w, $h, new ImagickPixel('#ffffff'));
}
$newimage->compositeImage($image,\Imagick::COMPOSITE_OVER,0,0);
$newimage->setImageCompression(Imagick::COMPRESSION_JPEG);
$newimage->setImageCompressionQuality(100);
$newimage->stripImage();
$newimage->writeImage($contactimage);
$newimage->destroy();
$image->destroy();

Upvotes: 0

Views: 1223

Answers (1)

fmw42
fmw42

Reputation: 53202

The simplest way to do pad to square or crop to square in ImageMagick 6 is as follows:

Input:

enter image description here

size=`convert hatching_orig.jpg -format "%[fx:max(w,h)]" info:`
convert hatching_orig.jpg -background red -gravity center -extent ${size}x${size} hatching_pad.jpg

enter image description here

size=`convert hatching_orig.jpg -format "%[fx:min(w,h)]" info:`
convert hatching_orig.jpg -background red -gravity center -extent ${size}x${size} hatching_crop.jpg

enter image description here

Same command, but different size variable.

In IM 7, you can do each in one command line.

These commands should be easy to convert to Imagick, I would expect. But should be done in sRGB colorspace. See https://www.php.net/manual/en/imagick.extentimage.php

Upvotes: 0

Related Questions