لا توجد وظيفة لإنشاء صور bmp في مكتبة GD، لذلك كتبت واحدة بنفسي. تحتوي هذه الوظيفة أيضًا على خوارزمية ضغط لم أكتبها بعد، ولكنها كافية. يمكن للطلاب الذين يحتاجون إليها إلقاء نظرة.
int imagebmp (صورة المورد [، اسم ملف السلسلة [، int $bit [، ضغط int]]] )
$im: مورد الصورة
$filename: إذا كنت تريد حفظه كملف، فيرجى تحديد اسم الملف إذا كان فارغًا، فسيتم إخراجه مباشرة في المتصفح.
$bit: جودة الصورة (1، 4، 8، 16، 24، 32 بت)
$compression: طريقة الضغط، 0 يعني عدم وجود ضغط، 1 يستخدم خوارزمية ضغط RLE8 للضغط.
ملاحظة: لا تزال هذه الوظيفة تتطلب دعم مكتبة GD.
العرض التوضيحي:
$im = imagecreatefrompng("test.png");
imagebmp($im);
تدمير الصورة($im);
مصدر:
/**
* إنشاء صور بتنسيق bmp
*
* @author: legend( [email protected] )
* @ الرابط: http://www.ugia.cn/?p=96
* @description: قم بإنشاء ملف Bitmap باستخدام مكتبة GD
* @الإصدار: 0.1
*
* @param المورد $im مصدر الصورة
* @param string $filename إذا كنت تريد حفظه كملف، فيرجى تحديد اسم الملف إذا كان فارغًا، فسيتم إخراجه مباشرة في المتصفح.
* @param عدد صحيح جودة الصورة بت $ (1، 4، 8، 16، 24، 32 بت)
* @param integer $ طريقة ضغط الضغط، 0 يعني عدم وجود ضغط، 1 يستخدم خوارزمية ضغط RLE8 للضغط
*
* @return عدد صحيح
*/
وظيفة imagebmp(&$im, $filename = '', $bit = 8, $compression = 0)
{
إذا (!in_array($bit, array(1, 4, 8, 16, 24, 32)))
{
بت $ = 8؛
}
وإلا إذا ($bit == 32) // todo:32 bit
{
بت $ = 24؛
}
$ بت = الأسرى (2، $ بت)؛
// ضبط لوحة الألوان
imagetruecolortopalette($im, true, $bits);
$width = Imagesx($im);
$height = imagesy($im);
$colors_num = imagecolorstotal($im);
إذا ($بت <= 8)
{
// مؤشر اللون
$rgb_quad = '';
لـ ($i = 0؛ $i < $colors_num؛ $i ++)
{
$colors = imagecolorsforindex($im, $i);
$rgb_quad .= chr($colors['blue']) . chr($colors['green']) .
}
// بيانات الصورة النقطية
$bmp_data = '';
// غير مضغوط
إذا ($ضغط == 0 || $bit <8)
{
إذا (!in_array($bit, array(1, 4, 8)))
{
بت $ = 8؛
}
ضغط $ = 0؛
// يجب أن يكون عدد البايتات في كل سطر من مضاعفات 4 ويجب إكماله.
$إضافي = '';
$padding = 4 - ceil($width / (8 / $bit)) % 4;
إذا ($الحشو٪ 4 != 0)
{
$extra = str_repeat("