А разве ф-ция не встроена в расширение?
Встроенными функциями называют функции, входящие в ядро php.
А чем тебе ImageMagic не угодил? Установил его в систему, добавил расширение и всё работает.
Ладно, хорош, если наткнётесь на готовое, но маленькое, плз, дайте знать.
Ты какую задачу решаешь? В GD что-то рисуешь и надо сохранить в .bmp?
Ну тогда держи решение. Правда я его не проверял. Но как я писал, bmp формат простой, данный код формирует заголовок и пишет "сырые" пиксели из GD ресурса.
<?php
function imagebmp_php5($im, $filename)
{
if (!is_resource($im)) {
return false;
}
$width = imagesx($im);
$height = imagesy($im);
// Каждая строка должна быть кратна 4 байтам
$rowPadding = (4 - ($width * 3) % 4) % 4;
$rowSize = ($width * 3) + $rowPadding;
$dataSize = $rowSize * $height;
$fileSize = 54 + $dataSize;
// --- BMP Header ---
$header = '';
$header .= 'BM'; // Signature
$header .= pack('V', $fileSize); // File size
$header .= pack('V', 0); // Reserved
$header .= pack('V', 54); // Pixel data offset
// --- DIB Header (BITMAPINFOHEADER) ---
$header .= pack('V', 40); // Header size
$header .= pack('V', $width);
$header .= pack('V', $height);
$header .= pack('v', 1); // Planes
$header .= pack('v', 24); // Bits per pixel
$header .= pack('V', 0); // Compression (none)
$header .= pack('V', $dataSize); // Image size
$header .= pack('V', 0); // X pixels per meter
$header .= pack('V', 0); // Y pixels per meter
$header .= pack('V', 0); // Colors used
$header .= pack('V', 0); // Important colors
// --- Pixel Data ---
$pixels = '';
// BMP пишется снизу вверх
for ($y = $height - 1; $y >= 0; $y--) {
for ($x = 0; $x < $width; $x++) {
$rgb = imagecolorat($im, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
// В BMP порядок BGR
$pixels .= chr($b) . chr($g) . chr($r);
}
// Padding до 4 байт
for ($p = 0; $p < $rowPadding; $p++) {
$pixels .= chr(0);
}
}
// Запись в файл
$fp = fopen($filename, 'wb');
if (!$fp) {
return false;
}
fwrite($fp, $header);
fwrite($fp, $pixels);
fclose($fp);
return true;
}
пример использования
$img = imagecreatetruecolor(200, 100);
$white = imagecolorallocate($img, 255, 255, 255);
$black = imagecolorallocate($img, 0, 0, 0);
imagefill($img, 0, 0, $white);
imagestring($img, 5, 10, 40, 'Hello BMP', $black);
imagebmp_php5($img, 'test.bmp');
imagedestroy($img);