旋转图像时保持大小
Preserve size while rotating image
我正在尝试在 PHP 代码中使用 Imagick 旋转箭头。目前我正在使用 rotateImage()
。我试图获得 "basic" 基本方向的角度 - 22,5°。我的问题显示在这些图像中。旋转的箭头有点小 - 在这里它不那么明显,但是当我放入地图时,它很明显,并且箭头旋转 f.e。到 WNW (292.5°) 真的很小。有什么方法可以旋转图像,使其保持箭头的大小?
编辑:Danack 代码后的图片:
$originalWidth = $this->image->getImageWidth();
$originalHeight = $this->image->getImageHeight();
$this->image->rotateimage(new ImagickPixel('#00000000'), $angle);
$newWidth = $this->image->getImageWidth();
$newHeight = $this->image->getImageHeight();
$this->image->cropImage(
$originalWidth,
$originalHeight,
($newWidth - $originalWidth) / 2,
($newHeight - $originalHeight) / 2
);
问题不是图像缩小了,而是图像变大了,但是你以相同的尺寸显示它,这使得箭头部分看起来更小了。
您可以将背景颜色设置为白色以外的其他颜色来查看此内容,或者访问演示:http://phpimagick.com/Imagick/rotateImage
您需要做的是在旋转后将图像裁剪回原始大小。
$imagick = new \Imagick(realpath($imagePath));
$originalWidth = $imagick->getImageWidth();
$originalHeight = $imagick->getImageHeight();
$imagick->rotateImage($color, $angle);
$imagick->setImagePage(
$imagick->getimageWidth(),
$imagick->getimageheight(),
0,
0
);
$imagick->cropImage(
$originalWidth,
$originalHeight,
($imagick->getimageWidth() - $originalWidth) / 2,
($imagick->getimageHeight() - $originalHeight) / 2
);
header("Content-Type: image/jpg");
echo $imagick->getImageBlob();
此外,Imagick::rotateImage 似乎是使 'image page' 保留有关新几何体信息的函数之一。您几乎肯定希望在调用任何其他受几何影响(例如裁剪)的功能之前重置图像页面。
我正在尝试在 PHP 代码中使用 Imagick 旋转箭头。目前我正在使用 rotateImage()
。我试图获得 "basic" 基本方向的角度 - 22,5°。我的问题显示在这些图像中。旋转的箭头有点小 - 在这里它不那么明显,但是当我放入地图时,它很明显,并且箭头旋转 f.e。到 WNW (292.5°) 真的很小。有什么方法可以旋转图像,使其保持箭头的大小?
编辑:Danack 代码后的图片:
$originalWidth = $this->image->getImageWidth();
$originalHeight = $this->image->getImageHeight();
$this->image->rotateimage(new ImagickPixel('#00000000'), $angle);
$newWidth = $this->image->getImageWidth();
$newHeight = $this->image->getImageHeight();
$this->image->cropImage(
$originalWidth,
$originalHeight,
($newWidth - $originalWidth) / 2,
($newHeight - $originalHeight) / 2
);
问题不是图像缩小了,而是图像变大了,但是你以相同的尺寸显示它,这使得箭头部分看起来更小了。
您可以将背景颜色设置为白色以外的其他颜色来查看此内容,或者访问演示:http://phpimagick.com/Imagick/rotateImage
您需要做的是在旋转后将图像裁剪回原始大小。
$imagick = new \Imagick(realpath($imagePath));
$originalWidth = $imagick->getImageWidth();
$originalHeight = $imagick->getImageHeight();
$imagick->rotateImage($color, $angle);
$imagick->setImagePage(
$imagick->getimageWidth(),
$imagick->getimageheight(),
0,
0
);
$imagick->cropImage(
$originalWidth,
$originalHeight,
($imagick->getimageWidth() - $originalWidth) / 2,
($imagick->getimageHeight() - $originalHeight) / 2
);
header("Content-Type: image/jpg");
echo $imagick->getImageBlob();
此外,Imagick::rotateImage 似乎是使 'image page' 保留有关新几何体信息的函数之一。您几乎肯定希望在调用任何其他受几何影响(例如裁剪)的功能之前重置图像页面。