如何在PHP中将RGB转换为1px base64编码数据uri

时间:2012-02-16 08:02:50

标签: php image base64

我正在尝试找出一种更有效的方法,从php中的单个RGB颜色代码创建1px x 1xx图像(jpg,png和gif)。

下面的例子说明了这样做的一种方法,但我希望某种算法可以获得相同的输出,而无需加载任何库或php扩展。

示例:

function rgbToDataUri($r,$g,$b,$type)
{
    $im = imageCreateTrueColor(1, 1);

    imageFill($im, 0, 0, ImageColorAllocate($im,$r,$g,$b));

    ob_start();

    switch($type)
    {
        case 'gif':
            imageGif($im);
            break;
        case 'jpg':
        case 'jpeg':
            imageJpeg($im);
            break;
        default:
            imagePng($im);
    }

    $img = ob_get_contents();

    ob_end_clean();

    return 'data:image/' . $type . ';base64,' . base64_encode($img);
}

echo rgbToDataUri(0,0,0,'gif');

输出:

data:image/gif;base64,R0lGODdhAQABAIAAAAQCBAAAACwAAAAAAQABAAACAkQBADs=

我的目标是(优先顺序):

  1. 内存消耗低
  2. 高处理器效率
  3. 处理速度快
  4. 要求包括支持gif,jpg和png。每个请求都会创建20到50个这样的单像素图​​像(每个像素独立于其他像素)。

    如何为1px单色图像生成二进制文件?

2 个答案:

答案 0 :(得分:0)

我不是这个领域的专家。但我遇到了“ImageMagick”这是一个用于创建和修改图像的本机PHP扩展。它可以以各种格式(超过100种)读取,转换和写入图像,包括DPX,EXR,GIF,JPEG,JPEG-2000,PDF,PhotoCD,PNG,Postscript,SVG和TIFF。

答案 1 :(得分:0)

我建议为每个支持的大小为1x1像素的图像保留二进制字符串,并找到存储颜色数据的位置(使用可用的规格)。然后你只需要在那里放置所需的颜色并进行base64编码。

至少对于PNG和GIF应该这样做。它们具有调色板,所有颜色数据都存储在一个地方。另一方面,JPG并不是普通的RGB,因此它有点棘手(绝对不是1x1图像的最佳选择)。