值得注意的是,如果使用 .gif 图像格式,使用 cropThumbnailImage 可能会出现意外结果。如果您使用 .gif,则需要使用此函数来删除画布。
<?php
// 实例化 image magick 类
$image = new Imagick($image_path);
// 裁剪和调整图像大小
$image->cropThumbnailImage(100,100);
// 删除画布
$image->setImagePage(0, 0, 0, 0);
?>
(PECL imagick 2, PECL imagick 3)
Imagick::cropThumbnailImage — 创建裁剪缩略图
通过首先向上或向下缩放图像并在中心裁剪指定区域来创建固定大小的缩略图。
width
缩略图的宽度
height
缩略图的高度
成功时返回 true
。
在错误情况下抛出 ImagickException。
值得注意的是,如果使用 .gif 图像格式,使用 cropThumbnailImage 可能会出现意外结果。如果您使用 .gif,则需要使用此函数来删除画布。
<?php
// 实例化 image magick 类
$image = new Imagick($image_path);
// 裁剪和调整图像大小
$image->cropThumbnailImage(100,100);
// 删除画布
$image->setImagePage(0, 0, 0, 0);
?>
在我看来,此函数的运行结果与预期不符,已针对 imagemagick 版本 6.3.7 进行测试。
如上所述,该函数返回一个具有固定高度和可变宽度的图像。以下修复程序将返回一个具有定义尺寸的裁剪缩略图,尺寸不会发生变化。
<?php
// 定义宽屏尺寸
$width = 160;
$height = 90;
// 加载图像
$i = new Imagick("your image file");
// 获取当前图像尺寸
$geo = $i->getImageGeometry();
// 裁剪图像
if(($geo['width']/$width) < ($geo['height']/$height))
{
$i->cropImage($geo['width'], floor($height*$geo['width']/$width), 0, (($geo['height']-($height*$geo['width']/$width))/2));
}
else
{
$i->cropImage(ceil($width*$geo['height']/$height), $geo['height'], (($geo['width']-($width*$geo['height']/$height))/2), 0);
}
// 将图像缩略为缩略图
$i->ThumbnailImage($width,$height,true);
// 保存或显示或任何图像
$i->setImageFormat("png");
header("Content-Type: image/png");
exit($i);
?>
我在此网站找到了一个相关的帖子,其中包含演示代码。
http://valokuva.org/?p=8
示例代码如下
<?php
/* 读取图像 */
$im = new imagick("test.png" );
/* 创建缩略图 */
$im->cropThumbnailImage(80, 80 );
/* 写入文件 */
$im->writeImage("th_80x80_test.png" );
?>
这是 cropImage 方法的专门化。从高层面上讲,此方法将创建一个给定图像的缩略图,该缩略图的尺寸为 ( $width, $height)。
如果缩略图与源图像的纵横比不匹配,则应使用此方法。缩略图将捕获源图像短边上的整个图像(即,横向图像上的垂直大小)。然后,缩略图将按比例缩小以满足目标高度,同时保持纵横比。目标 $width 内无法容纳的额外水平空间将从左右两侧均匀裁剪。
因此,缩略图通常是源图像的良好表示。
$image = new Imagick($path."test1.jpg");
$image->cropThumbnailImage(160,120); // 裁剪图像并缩略
$image->writeImage($path."test1.jpg");