如何在 PHP 中裁剪具有尺寸(没有质量损失)的图像?
Posted
技术标签:
【中文标题】如何在 PHP 中裁剪具有尺寸(没有质量损失)的图像?【英文标题】:How to crop image with dimensions (without quality loss) in PHP? 【发布时间】:2017-02-24 10:45:51 【问题描述】:我需要使用 php 使用尺寸裁剪图像。
并以JPEG格式保存到本地。
我收到的尺寸是,
"left":82.5,"top":48.875,"width":660,"height":371.25
我需要从图像的原始尺寸进行裁剪。
例如。图像是 1200x800,然后是实际尺寸的结果图像尺寸,而不是调整大小或任何。因为质量应该是一样的。
我如何使用这些参数来裁剪图像?
有可能吗?
【问题讨论】:
这些值是什么维度? 0.5 px 将很难生成 【参考方案1】:使用内置imagick class:
$image = realpath("/path/to/your/image.extension");
$cropped = realpath("/path/to/your/output/image.png");
$imObj = new Imagick();
$imObj->cropImage($width, $height, $offset_x, $offset_y);
$imObj->setImageFormat("png"); // this is unnesesary, you can force an image format with the extension of the output filename.
$imObj->writeImage($cropped);
至于无损输出,请使用无损编码的图像格式。 PNG 非常适合这项工作,因为它是为网络传输而设计的(因此是“Adam-7”隔行扫描)。 检查有关图形设计堆栈上的无损图像格式的相关问题:
What are lossless image formats?
【讨论】:
Imagick 不是内置于This » PECL extension is not bundled with PHP.
【参考方案2】:
您可以使用imageCopyResampled 函数,该函数几乎就是为此而设计的。
$image = imagecreatefromjpeg($imageFileURL);
/***
* resize values (imported)
***/
$left = 82;
$top = 49;
$width = 660;
$height = 371;
/***
* Create destination image
***/
$newImage = imagecreatetruecolor($width,$height);
$saveToFile = "destintion filespace of image file.jpg"
if(imagecopyresampled($newImage, $image, //dest/source images
0, 0, // dest coordinates
$left, $top, // source coordinates
$width, $height, // size of area to paste to
$width, $height // size of area to copy from
))
imagejpeg($newImage,$saveToFile,100); //zero compression saved to file
print "image resized ok!!";
新文件图像的大小将是$width
,$height
指定的大小,并将与原始图像偏移$left
和$top
中给出的值。从你的问题来看,这看起来像你想要的。这不会调整图像的大小或更改图像的压缩(直到您保存文件然后可能自己设置这些详细信息)。
【讨论】:
以上是关于如何在 PHP 中裁剪具有尺寸(没有质量损失)的图像?的主要内容,如果未能解决你的问题,请参考以下文章