Я ищу возможность записать 1 бит битовой карты из строки с этим контентом:
$str = "001011000111110000";
Нуль белый, а один черный. Файл BMP будет 18 x 1 px.
Я не хочу 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()
. Кроме того: я только что загрузил официальную библиотеку с открытым исходным кодом. Официальный репозиторий Bitbucket
Что я нашел в 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).
«Альтернативным» решением является создание внешнего изображения, 1 бит монохромного png, и с помощью imagecreatefrompng()
как я сказал выше.