如何在 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 中裁剪具有尺寸(没有质量损失)的图像?的主要内容,如果未能解决你的问题,请参考以下文章

在浏览器中自动裁剪图像

调整图像大小而不损失不同屏幕尺寸的质量。最好的方法是啥?

Android:来自Url的Webview中显示的图像具有高质量损失

PHP JPEG 裁剪:质量下降?

从中心 PHP 裁剪图像

在 PictureBox Form C# 中调整大小时丢失图像质量