【问题标题】:PHP image resize using nearest-neighbor interpolation?PHP图像使用最近邻插值调整大小?
【发布时间】:2023-03-17 07:51:01
【问题描述】:

我有一个 16x16 的 PNG 或 GIF 图像格式的精灵,并希望在网站上以 64 x 64 的像素显示它。在 Firefox 3.6+ 和 IE 中,我可以使用 image-rendering and -ms-interpolation-mode 使用 CSS 轻松完成此操作,但由于这不适用于所有浏览器,我想使用 PHP 动态调整图像大小。在 PHP 中使用最近邻插值调整图像大小的最佳方法是什么?

【问题讨论】:

    标签: php resize image-manipulation


    【解决方案1】:

    如果您想在调整大小时保持像素化,您需要使用 GD 库执行以下操作:

    <?php
    // create GD image resource from source image file
    $src = imagecreatefromgif('test.gif');
    
    // create new GD image resource with indexed color
    $dest = imagecreate(64, 64);
    
    // copy/resize image without resampling
    imagecopyresized($dest, $src, 0, 0, 0, 0, 64, 64, 16, 16);
    
    // output result
    header('Content-type: image/gif');
    imagegif($dest);
    ?>
    

    我已经测试了代码,像素化仍然完好无损。您将不得不调整代码以接受 png 文件作为输入,这应该相当容易,因为每个 GD gif 函数也有相应的 png 函数。希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      如果你也需要调整 GIF 的大小,你可以使用 ImageMagick 项目。

      您可以使用 GD,但是,您可能会丢失一些 EXIF 数据。

      KusabaX 项目有一个很棒的图像转换功能。检查第 58 行的文件“/inc/func/posts.php”。;-)

      【讨论】:

      • 谢谢 - 我知道 GD 可以,但我想知道最好的方法。丢失 EXIF 数据对我来说无关紧要。
      【解决方案3】:

      http://www.imagemagick.org/Usage/misc/#interpolate

      http://www.francodacosta.com/blog/phmagick/examples/resizing-images

      这是关于 imagemagick 中插值的一些信息。 第二个链接是一个名为 phMagick 的类,它是 imagemagick 库的全功能包装器。链接的示例用于基本的调整大小操作,但没有为库进行的命令行调用设置插值标志。

      确实可以通过类完全访问命令行,如果缺少插值标志支持,则可以通过插件扩展类的简单机制。它也是 php5 准备好的。

      如果这不能为您指明正确的方向,我不知道会怎样。如果不出意外的话,phMagick 类应该可以为您提供一个良好的起点,以便为您的特定目的编写更精简的包装器。

      【讨论】:

      • 我认为我无法访问 Imagemagick,但我刚刚检查了我的托管服务,结果证明我可以访问。所以这很有帮助,谢谢!
      【解决方案4】:

      答案是,没关系。缓存结果。保存结果的硬拷贝并输出。如果图像从不改变而识别信息也不会改变,则只执行一次。

      您可能会争辩说这不是正确的答案。这不是你要求的。但这是最好的答案。随着时间的推移,它将节省最多的处理时间。到了图像调整大小的初始加载时间变得完全没有意义的地步,渲染可能需要 30 秒,而且只会影响一个人,一次。

      【讨论】:

      • 这很重要 - 他有一个稍微不正常的用例,想知道一种方便的方法来处理来自 php 文件的最近邻/整数插值。在他解决了他提出的问题后告诉他该做什么有点粗鲁 - 特别是当你甚至没有尝试回答实际问题时。
      • "谢谢 - 我知道 GD 可以,但我想知道最好的方法。" OP已经知道一种方法。他们正在寻找“最佳方式”,我已经提供了这些信息。最好的方法是不要浪费时间寻找更好的方法,并以他/她已经知道的方式缓存结果。
      • 我的问题是关于如何使用 PHP 的 GD 函数在保持图像像素艺术质量的同时调整图像大小。所以不,这不是特别有用。
      【解决方案5】:

      Symphony 是一个很棒的 PHP 驱动的框架,它使用了JIT manipulator,这让这一切变得轻而易举! :P

      在您的情况下,图像将是

      <img src="http://yoursite.com/image/1/64/64/0/images/16pixels.jpg"/>
      

      【讨论】:

        猜你喜欢
        • 2020-05-20
        • 2014-11-15
        • 2018-12-04
        • 2021-12-12
        • 2017-02-01
        • 1970-01-01
        • 2012-04-24
        • 2018-10-12
        • 2019-02-20
        相关资源
        最近更新 更多