PHP imagecopyresampled + 如何获得最佳结果

Posted

技术标签:

【中文标题】PHP imagecopyresampled + 如何获得最佳结果【英文标题】:PHP imagecopyresampled + how to get the best results 【发布时间】:2012-09-20 21:12:40 【问题描述】:

我有以下工作正常:

    用户上传一张图片,并使用 imagecopyresampled 和 imagejpeg(保持比例)调整图片大小,使其适合裁剪 DIV。

    然后用户使用 JCrop 裁剪图像,然后使用 imagecopyresampled 和 imagejpeg 将调整大小的上述图像切割成 5 种所需的裁剪尺寸。


我发现的问题是从调整大小的图像中裁剪并没有利用通常更大、质量更好的原始图像。

所以我想显示一个适合 DIV 的图像,但要从原始图像中裁剪以获得最佳质量。

当我只是将裁剪更改为原始图像时,裁剪是图像的错误部分,因为尺寸不同。我认为这很明显。不同大小的图像。


如何显示适合 Jcrop 的 DIV 的图像,然后实际裁剪掉通常较大的原始图像?

我正在测试的想法:

在 DIV 中显示原始图像(不是由 php 调整大小,而是由 CSS 调整大小)。我不确定这是否会有所不同。

尝试使用一些基于数学的方程式来获得正确的作物。不确定我目前将如何执行此操作。

想法会很棒... 谢谢

【问题讨论】:

【参考方案1】:

如果您必须使用全尺寸图像服务器端,我个人会选择基于数学的解决方案。直接在浏览器中或通过 CSS 重新缩放不是理想的 IMO,并且在浏览器之间存在很大差异。如果您使用基于数学的选项,您可以计算较小图像裁剪的坐标并将其放大以获得原始图像的正确部分。

在旁注中,您可能会发现(取决于您允许上传的图像大小和图像类型)在 PHP 端复制和调整大小非常消耗 CPU 和内存。例如,一个高分辨率的大约 1024 x 768 的 png 文件可能需要多达 60MB 到 80MB 的 RAM 来调整大小(由于 png 文件的压缩,每个图像重新采样),这与 PHP 图像处理模块( ImageMagick 等)您使用。没有完美的方法来处理从 PHP 服务器端上传的图像(除了在任务中投入大量内存和 CPU)。有一些很好的 jQuery 解决方案可以在上传之前在客户端调整大小(例如Plupload 等),这意味着您将只能在服务器端使用缩小尺寸的图像。还有一些很好的 JQuery 客户端裁剪脚本。无论哪种方式,PHP 和 jQuery 的组合都是最好的 IMO。

【讨论】:

以上是关于PHP imagecopyresampled + 如何获得最佳结果的主要内容,如果未能解决你的问题,请参考以下文章

PHP GD imagecopyresampled() 并将其水平翻转

php imagecopyresampled 质量差

php imagecopyresampled - 保存后图像为空(全黑)

突破php 的imagecopyresampled 和imagecopyresized 实现图片马 JPG

在 PHP imagecopyresampled 中裁剪图像 - 挤压而不是裁剪

使用PHP的GDlib imagecopyresampled时可以保留PNG图像透明度吗?