使用 PHP (GD) 进行图像裁剪
Posted
技术标签:
【中文标题】使用 PHP (GD) 进行图像裁剪【英文标题】:Image cropping with PHP (GD) 【发布时间】:2014-06-03 21:04:40 【问题描述】:我想要裁剪下面的图像,因此所有黑色区域都被移除并返回拇指。 拇指必须是 130 像素(宽)乘 155 像素(高)。
如何使用 php 的 GD 库对其进行裁剪? (Imagick 库不是一个选项)。
如果我的问题有什么可以改进的地方,请告诉我。
编辑
我使用了@Martijn 建议的 imagecopyresized() 函数,代码如下
imagecopyresized(
imagecreatetruecolor(130,155) ,
imagecreatefromjpeg($src_image) ,
0,
0,
0,
0,
130,
155,
260 ,
310
)
我得到的是这个结果
我做错了什么?
【问题讨论】:
明确地说,你想要一些东西:a)修剪黑色,b)拇指它?还是黑色是您裁剪中的错误? 第一个选项 - 修剪黑色并返回尺寸为 130x155 的图像 关于您的编辑:您选择的黑色图像似乎太小了。你确定它的260x310?如果是这样,一次只玩 1 个变量,看看它的作用。它会让你更好地理解这个功能:) 是的。尺寸为 260x310。对不起,我不是英语。放置 1 个变量是什么意思? 打错了,应该是play around
,随便弄一下,看看改了会怎样
【参考方案1】:
这对于库来说很难做到,因为黑色的大小可能不同,而且您可能需要的图像部分并不总是相同的。
我建议jCrop(是的,该站点非常小),它允许您选择图像的一部分。如果可以手工完成,这是一个非常简单的方法。我在我公司的 CMS 中使用它,我们的客户永远不需要解释 it works, very natural :)
如果这不是一个选项,你可以试试imagecopyresampled()
:
imagecopyresampled(
$dst_image , // the thumb you want to place it on
$src_image , // the image to crop it from
0, // place left of thumb
0, // place top of thumb
0, // start from left of input image
0, // start from top of input image
130, // destination width
155, // destination height
$src_w , // the width of the image without the black
$src_h // the height of the image without the black
)
如果黑色画布上的图像没有固定大小,可以编写一个函数来查找偏移量。您可以通过获取第一行像素并找到第一个黑色像素,然后检查之后是否有(比如说)10 分钟的黑色像素。 这可能很敏感,您可以增加侦察区域以测试黑色是否也在下面的行中。
【讨论】:
imagecopyresampled() php.net/manual/en/function.imagecopyresampled.php 怎么样?它们差别很大吗? 好的。我正在尝试 imagecopyresized(),如果成功会通知你。 是的,那是我真正想要的。用非常简单的术语来说,copyResized 的比例就像paint 一样,不是那么漂亮,但速度很快。重采样的作品更像photoshop,效果更漂亮 只需要澄清一件事,$dst_image 应该有 130x155 尺寸并且由 imagecreatetrucolor(w,h) 创建? 朱普。 jCrop 也有一些示例如何做到这一点。即使你不打算使用它,它也会朝着正确的方向推进以上是关于使用 PHP (GD) 进行图像裁剪的主要内容,如果未能解决你的问题,请参考以下文章
使用 codeigniter 进行图像裁剪,没有 GD 库 - 安装了 GD2