包括 Imagick ::rotateImage() 在内的一些转换可能会更改“图像页面”——您在其上工作的图像内的工作区域。
之后要小心后续修改,因为图像页面可能与图像的新尺寸不同。
例如,如果您在旋转后执行 Imagic::cropImage(),则需要正确设置图像页面,否则您的裁剪将根据错误的坐标执行(取决于旋转角度,生成的图像大小可能会变化)。
<?php
$Image = new Imagick($sourceImagePath);
$transparent = '#00000000';
$Image->rotateImage(new \ImagickPixel(), 45); // 这使得生成的图像更大
// 将页面设置为新图像的完整大小,从左上角 (0, 0) 开始
$Image->setImagePage($Image->getImageWidth(), $Image->getImageHeight(), 0, 0);
$Image->cropImage($crop_w, $crop_h, $crop_x, $crop_y);
?>