如何从 jpeg 的顶部和底部裁剪 45px
Posted
技术标签:
【中文标题】如何从 jpeg 的顶部和底部裁剪 45px【英文标题】:How to crop 45px from the top and bottom of a jpeg 【发布时间】:2017-08-27 01:17:32 【问题描述】:我正在尝试从 YouTube jpeg 缩略图图像的顶部和底部裁剪 45 像素,例如 this one,即 480 像素 x 360 像素。
看起来像这样:
请注意图像顶部和底部的 45 像素黑条。我只是想删除那些,这样我的结果图像是 480px x 270px 并且黑条消失了。
通过实现this stack post 中的示例,我取得了部分成功。这是我基于此的 php 函数:
function CropImage($sourceImagePath, $width, $height)
$src = imagecreatefromjpeg($sourceImagePath);
$dest = imagecreatetruecolor($width, $height);
imagecopy($dest, $src, 0, 0, 20, 13, $width, $height);
header('Content-Type: image/jpeg');
imagejpeg($dest);
imagedestroy($dest);
imagedestroy($src);
如此称呼:
CropImage("LOTR.jpg", 480, 270);
发生了一些裁剪,但导致了 2 个问题:
-
它没有裁剪顶部和底部,而是似乎裁剪了左侧和底部,结果如下:
-
从我正在使用的 PHP 代码 sn-p 中,我看不到如何生成新文件。相反,我在浏览器中执行的 PHP 脚本只是在浏览器中呈现变形文件。我不希望这种情况发生,我希望能够将 dest 路径传递给函数并让它创建新文件(而不向客户端/浏览器发送任何内容),并删除顶部 45px 和底部 45px。很明显,
header('Content-Type: image/jpeg');
是问题的一部分,但删除它仍然不会给我一个写入服务器的目标文件,我想。
我也在寻找PHP docs here。似乎更改 imagecopy($dest, $src, 0, 0, 20, 13, $width, $height);
中的参数可以解决这个问题,但我真的不清楚这些参数应该是什么。带有黑条的resulting thumbnails inside the YouTube tab look odd。提前感谢您的任何建议。
【问题讨论】:
imagecopy imagejpeg 我将什么传递给imagejpeg()
? $src
? $dest
?还有什么?
两者。只需要改$src_x
和$src_y
,20和13错了。
又是怎么写文件的?
【参考方案1】:
<?php
function CropImage($sourceImagePath, $width, $height)
// Figure out the size of the source image
$imageSize = getimagesize($sourceImagePath);
$imageWidth = $imageSize[0];
$imageHeight = $imageSize[1];
// If the source image is already smaller than the crop request, return (do nothing)
if ($imageWidth < $width || $imageHeight < $height) return;
// Get the adjustment by dividing the difference by two
$adjustedWidth = ($imageWidth - $width) / 2;
$adjustedHeight = ($imageHeight - $height) / 2;
$src = imagecreatefromjpeg($sourceImagePath);
// Create the new image
$dest = imagecreatetruecolor($width,$height);
// Copy, using the adjustment to crop the source image
imagecopy($dest, $src, 0, 0, $adjustedWidth, $adjustedHeight, $width, $height);
imagejpeg($dest,'somefile.jpg');
imagedestroy($dest);
imagedestroy($src);
【讨论】:
user2182349 您的解决方案完美运行,但我仍然看不到如何将修改后的图像保存到服务器。header('Content-Type: image/jpeg');
当然需要删除,但是保存更改的图像的语法是什么?
是的,就是这样。请更新您的答案,并删除header
。所以我可以接受,它可能会帮助别人。以上是关于如何从 jpeg 的顶部和底部裁剪 45px的主要内容,如果未能解决你的问题,请参考以下文章