【问题标题】:Converting an image to pre-defined 16 colors将图像转换为预定义的 16 种颜色
【发布时间】:2013-05-09 16:30:21
【问题描述】:

给定一个图像文件,将其转换为老式 16 色的最佳方法是什么?即白色、橙色、洋红色、浅蓝色、黄色、石灰、粉色、灰色、浅灰色、青色、紫色、蓝色、棕色、绿色、红色和黑色。

我制作了一个 1x16 像素的小图像,其中包含我可以用作源调色板的所有 16 种颜色(对吗?),但我无法使用它。 imagepalettecopy() 似乎是我想要的(将 16 像素数据图像的调色板复制到新图像上)但我想出的代码不起作用:

<?php

$palette = imagecreatefrompng( __DIR__ . '/palette.png' );

$source = imagecreatefromjpeg( __DIR__ . '/testimage.jpg' );

$source_w = imagesx( $source );
$source_h = imagesy( $source );

$image = imagecreate( $source_w, $source_h );

imagepalettecopy( $palette, $image );

imagecopy( $image, $source, 0, 0, 0, 0, $source_w, $source_h );

header('Content-Type: image/png');
imagepng( $image );

它似乎只是将它转换为它选择的 16 种颜色或其他东西(我不太确定)。

我错过了什么或做错了什么?

编辑:我的imagepalettecopy() 调用是向后的,但修复它也无济于事。请参见下面的 cmets。

【问题讨论】:

    标签: php colors gd


    【解决方案1】:

    变化
    imagepalettecopy($palette, $image);
    进入
    imagepalettecopy($image, $palette);
    工作?

    编辑:

    我尝试了以下调色板作为 gif:

    我认为这些颜色与您的不同。 (我从图中亲手摘了果岭...)

    这是我尝试过的代码(这里没有真正的区别):

    <?php
    
    $palette = imagecreatefromgif('palette-gif-03.gif');
    
    $source = imagecreatefromjpeg('test-image-01.jpg');
    
    $source_w = imagesx($source);
    $source_h = imagesy($source);
    
    $image = imagecreate($source_w, $source_h);
    
    imagepalettecopy($image, $palette);
    
    imagecopy($image, $source, 0, 0, 0, 0, $source_w, $source_h);
    
    header('Content-Type: image/png');
    imagepng($image);
    
    imagedestroy($imgage);
    imagedestroy($palette);
    imagedestroy($source);
    ?>
    

    这是我的结果:

    请让我知道我是否应该删除图片?!!

    【讨论】:

    • 感谢您的回复!不,它保留了原始的多色调色板。我上面的代码确实改变了图像并显着减少了它的颜色数量,但它似乎将它减少到它选择的 16 种颜色(在我的例子中是许多蓝色和灰色的阴影)。
    • 奇怪,因为手册上说 imagepalettecopy (resource $destination , resource $source)。您能否在问题中添加示例性源图像和生成的图像?
    • 对不起,我之前的评论有误。我的代码中的错误。然而,这两个订单(我的意外错误和正确的订单)都会导致相似但错误的图像。测试图像:viper007bond.com/wordpress/wp-content/uploads/2013/05/…正确顺序(图像、调色板):pic.armedcats.net/b/bl/blue/2013/05/15/imagepalette.png原始向后顺序(调色板、图像):pic.armedcats.net/b/bl/blue/2013/05/15/paletteimage.png
    • 有趣。我想知道您使用 GIF 调色板文件而不是像我这样的 PNG 的事实是否会有所作为。不管怎样,谢谢! (很好地保持图像,它在我的博客上公开)
    猜你喜欢
    • 2018-01-10
    • 2011-04-23
    • 2015-05-02
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 2013-08-15
    相关资源
    最近更新 更多