【发布时间】:2012-03-07 15:09:34
【问题描述】:
我正在尝试找出一种更有效的方法来从 php.ini 中的单一 RGB 颜色代码创建 1px x 1px 图像(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=
我的目标是(按优先顺序):
- 低内存消耗
- 处理器效率高
- 处理速度快
要求包括支持 gif、jpg 和 png。每次请求都会创建 20 到 50 张这样的单像素图像(每个像素独立于其他像素)。
如何生成 1px 单色图像的二进制文件?
【问题讨论】:
-
您的代码非常简单/直接。您几乎肯定不想手动实现所有各种图像格式。
-
输出 BMP 怎么样?对于单个像素,它与其他三种格式一样有效,并且可能足够简单,因此您可以使用一些位移和
packing 直接生成二进制文件,而无需太多工作。 -
@amber 不幸的是,简单不是这个特定练习的目标。
-
@deceze 除了列出的格式之外,我还可以生成 BMP,但我确实需要支持其他格式,因为这是主要要求之一。你的方法听起来很有趣。如何直接为 1px 图像生成二进制文件?也许这应该是我的问题。
-
您可以通过简单地生成几个字节的标头(可能是静态的)来生成 BMP,然后将这些位拼凑成单个像素的颜色值。请参阅en.wikipedia.org/wiki/BMP_file_format 的格式说明以了解开始。一个新的问题可能确实很有趣。