如何在PHP中裁剪尺寸(没有质量损失)的图像?

时间:2017-02-24 10:45:51

标签: php crop

我需要使用尺寸来使用PHP裁剪图像。

并以JPEG格式保存到本地。

我收到的尺寸是,

 * Merge commit (missing file a.c)
/|
||
*| Add new file a.c again <- branchB
||
|* Remove files a.c <- branchA
||
*| Remove files a.c
||
\|
 |
 * Add new file a.c
 |
 |
...

我需要从图像的原始大小进行裁剪。

实施例。图像是1200x800,然后是实际尺寸的结果图像尺寸,而不是调整尺寸或任何尺寸。因为质量应该相同。

我如何使用这些参数来裁剪图像?

有可能吗?

2 个答案:

答案 0 :(得分:0)

使用内置的 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?

答案 1 :(得分:0)

您可以使用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!!";
}

新的fileimage将使用$width$height指定的大小,并将通过$left$top中给出的值偏离原始图像。从您的问题看,这看起来像你想要的。这不会调整大小或更改图像的压缩(直到您保存文件,然后可能自己设置这些细节)。