很久以前,我创建了一个小型库,用于通过 imagemagick 调整图像大小,system(...)
因为我觉得 PHP 的内置 imagemagick 函数不够用。
然而,最近我不得不将它移植到一个 symfony 项目中,我选择使用 sfThumbnailPlugin(如果我没记错的话)。不幸的是,这不包括裁剪功能 - 即指定所需的大小,例如 300x300 像素并裁剪缩略图以使其适合。我选择自己实现这个功能,但似乎有问题。
每当我将图像的大小调整到所需的大小时,宽度大于高度时,比例就会被搞砸。看看这个例子: http: //i37.tinypic.com/9hkqrl.png - 在这个例子中,最上面一行是正确的比例,最下面一行是问题所在。
在示例中,顶部和底部应该已被裁剪。
这是完成裁剪部分的代码(变量名称应该是不言自明的):
<?php
if ($width/$height > $this->maxWidth/$this->maxHeight) {
// then resize to the new height...
$command .= ' -resize "x'.$this->maxWidth.'"';
// ... and get the middle part of the new image
// what is the resized width?
$resized_w = ($this->maxWidth/$height) * $width;
// crop
$command .= ' -crop "'.$this->maxHeight.'x'.$this->maxWidth.'+'.round(($resized_w - $this->maxWidth)/2).'+0"';
} else {
// or else resize to the new width
$command .= ' -resize "'.$this->maxHeight.'x"';
// ... and get the middle part of the new image
// what is the resized height?
$resized_h = ($this->maxHeight/$width) * $height;
// crop
$command .= ' -crop "'.$this->maxWidth.'x'.$this->maxHeight.
'+0+'.round(($resized_h - $this->maxHeight)/2).'" +repage';
}
Is 是产生错误代码的 if 语句的第二部分。
任何人都可以为我纠正这个吗?显然计算是错误的。