在php中创建1位位图(单色)
我正在寻找从这个内容的字符串中写入1位位图的可能性:
$str = "001011000111110000";
零是白色,一个是黑色。 BMP文件将是18 x 1像素。
我不想要一个24位BMP,而是一个真正的1位BMP。
有谁知道PHP中的标题和转换方法吗?
这是一个奇怪的要求:)
所以,你想在这里使用的是一个开始的php-gd。 一般情况下,这是包括在任何操作系统上安装PHP的体面回购,但只是因为它不适合你,你可以在这里得到安装说明;
http://www.php.net/manual/en/image.setup.php
首先,我们需要弄清楚图像的宽度需要多大; 高度显然永远是一个。
所以;
$str = $_GET['str'];
$img_width = strlen($str);
strlen会告诉我们$ str字符串中有多少个字符,并且由于我们给每个字符一个像素,所以字符数量会给我们所需的宽度。
为了便于访问,将字符串拆分为一个数组 - 每个单独的像素的每个元素。
$color_array = str_split($str);
现在,让我们设置一个“指针”,我们正在绘制哪个像素。 这是PHP,所以你不需要这个,但它很好整洁。
$current_px = (int) 0;
现在您可以初始化GD并开始制作图像;
$im = imagecreatetruecolor($img_width, 1);
// Initialise colours;
$black = imagecolorallocate($im, 0, 0, 0);
$white = imagecolorallocate($im, 255, 255, 255);
// Now, start running through the array
foreach ($color_array as $y)
{
if ($y == 1)
{
imagesetpixel ( $im, $current_px , 1 , $black );
}
$current_px++; // Don't need to "draw" a white pixel for 0. Just draw nothing and add to the counter.
}
这会画出你的图像,然后你需要做的就是显示它;
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
请注意,根本不需要$ white声明 - 我只是将它留给了您,让您了解如何使用gd声明不同的颜色。
在使用之前,您可能需要稍微调试一下 - 从使用GD开始已经很长时间了。 无论如何,希望这有助于!
这不是一个奇怪的要求。
我完全同意问题的目的,实际上我必须管理一些1位单色图像。
答案是:
imagecreate()
或imagecreatetruecolor()
imagecreatefrompng()
加载它来解决。 另外:我刚刚从hereOfficial Bitbucket Repository下载了官方库的开源代码
我在gd.h
找到了什么?
上面提到的功能的定义:
/* Functions to manipulate images. */
/* Creates a palette-based image (up to 256 colors). */
BGD_DECLARE(gdImagePtr) gdImageCreate (int sx, int sy);
/* An alternate name for the above (2.0). */
#define gdImageCreatePalette gdImageCreate
/* Creates a truecolor image (millions of colors). */
BGD_DECLARE(gdImagePtr) gdImageCreateTrueColor (int sx, int sy);
所以“官方”解决方案是:使用imagecreate()
(包装gdImageCreate()
GD函数)创建2个调色板图像。
“替代”解决方案是创建一个外部图像,1位单色PNG,它与imagecreatefrompng()
如上所述。
上一篇: Create 1 bit bitmap (monochrome) in php
下一篇: unable to build: the file dx.jar was not loaded from the SDK folder