PHP GD - 围绕任何给定点裁剪图像
Posted
技术标签:
【中文标题】PHP GD - 围绕任何给定点裁剪图像【英文标题】:PHP GD - crop image around any given point 【发布时间】:2014-09-15 13:33:09 【问题描述】:我有以下脚本,使用 php 的 gd 在中心点成功裁剪和图像:
list($source_width, $source_height, $source_type) = getimagesize($img_path);
define('IMAGE_WIDTH', 200);
define('IMAGE_HEIGHT', 300);
$ratio = $source_width / $source_height;
$desired_aspect_ratio = IMAGE_WIDTH / IMAGE_HEIGHT;
if ($ratio > $desired_aspect_ratio)
$temp_height = IMAGE_HEIGHT;
$temp_width = ( int ) (IMAGE_HEIGHT * $ratio);
else
$temp_width = IMAGE_WIDTH;
$temp_height = ( int ) (IMAGE_WIDTH / $ratio);
$x = ($temp_width - IMAGE_WIDTH) / 2;
$y = ($temp_height - IMAGE_HEIGHT) / 2;
$cropped = imagecreatetruecolor(IMAGE_WIDTH, IMAGE_HEIGHT);
imagecopy(
$cropped,
$temp,
0, 0,
$x, $y,
IMAGE_WIDTH, IMAGE_HEIGHT
);
而不是这个为中心:
$x = ($temp_width - IMAGE_WIDTH) / 2;
$y = ($temp_height - IMAGE_HEIGHT) / 2;
在我的网站上,用户可以选择图像的“主要焦点”,我将在其中裁剪图像。焦点将以百分比形式提供。我已经有了供客户选择的百分比和方法,我只需要获取这些值并围绕它们进行裁剪。这可以做到吗?例如,如果我希望我的图像围绕点裁剪,如下图所示:
【问题讨论】:
您是在问 PHP 将如何围绕选定点进行裁剪,或者如何从用户那里获取要裁剪的位置? 我如何使用 PHP 围绕这一点进行裁剪。我已经准备好使用的存储位置 对于逻辑部分,您必须获取焦点的坐标,从中减去 100 并将其用作 x1/y1。对于 x2/y2,您也可以这样做,但这次不是减去 100,而是添加它。这是基本程序。您仍然需要检查图像边框和其他边缘情况。 @ThomasDavidPlat 谢谢。我正在尝试写出逻辑/公式,但似乎无法正确。我不确定您所说的 x1 和 x2、y1 和 y2 是什么意思? 换句话说:x1/y1是你开始裁剪过程的点,x2/y2减去x1/y2是你需要裁剪的宽度/高度 【参考方案1】:下面的函数应该做你想做的。
仅传递第一个参数将输出您现在拥有的内容:源图像的中间被裁剪为 200px/200px。 第二个和第三个参数允许您根据需要指定作物中心的 X/Y 百分比坐标。 第四个和第五个参数允许您设置裁剪图像的大小。(请注意,这假设为 PNG,但如果需要,您应该能够轻松地将其调整为其他格式。)
function crop($file, $cropX = 50, $cropY = 50, $cropW = 200, $cropH = 200)
$src = imagecreatefrompng($file);
$dest = imagecreatetruecolor($cropW, $cropH);
list($src_w, $src_h) = getimagesize($file);
// calculate x/y coordinates for crop from supplied percentages.
$src_x = (($src_w / 100) * $cropX) - ($cropW / 2);
$src_y = (($src_h / 100) * $cropY) - ($cropH / 2);
imagecopy($dest, $src, 0, 0, $src_x, $src_y, $src_w, $src_h);
imagedestroy($src);
return $dest;
使用示例(将 X 的裁剪焦点设置为 70%):
$img = crop('test.png', 70);
header('Content-type: image/png');
imagepng($img);
imagedestroy($img);
【讨论】:
以上是关于PHP GD - 围绕任何给定点裁剪图像的主要内容,如果未能解决你的问题,请参考以下文章