ไม่มีฟังก์ชันสำหรับสร้างอิมเมจ 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);
imagedestroy($im);
แหล่งที่มา:
/**
* สร้างรูปภาพในรูปแบบ bmp
-
* @ผู้เขียน: legend( [email protected] )
* @ลิงค์: http://www.ugia.cn/?p=96
* @description: สร้างไฟล์ Bitmap ด้วยไลบรารี GD
* @เวอร์ชัน: 0.1
-
* ทรัพยากร @param ทรัพยากรรูปภาพ $im
* @param string $filename หากคุณต้องการบันทึกเป็นไฟล์ โปรดระบุชื่อไฟล์ หากว่างเปล่า ไฟล์จะถูกส่งออกโดยตรงในเบราว์เซอร์
* @param จำนวนเต็ม คุณภาพของภาพ $bit (1, 4, 8, 16, 24, 32 บิต)
* วิธีการบีบอัด @param จำนวนเต็ม $compression, 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 บิต
-
$บิต = 24;
-
$bits = ธาร(2, $bit);
//ปรับจานสี
imagetruecolortopalette ($ im, จริง, $ bits);
$width = imagesx($im);
$height = รูปภาพ($im);
$colors_num = imagecolorstotal($im);
ถ้า ($บิต <= 8)
-
// ดัชนีสี
$rgb_quad = '';
สำหรับ ($i = 0; $i < $colors_num; $i ++)
-
$colors = imagecolorsforindex($im, $i);
$rgb_quad .= chr($colors['blue']) .
-
// ข้อมูลบิตแมป
$bmp_data = '';
// ไม่บีบอัด
ถ้า ($ การบีบอัด == 0 || $ บิต < 8)
-
ถ้า (!in_array($bit, array(1, 4, 8)))
-
$บิต = 8;
-
$ การบีบอัด = 0;
//จำนวนไบต์ในแต่ละบรรทัดต้องเป็นจำนวนทวีคูณของ 4 และต้องกรอกข้อมูลให้ครบถ้วน
$พิเศษ = '';
$padding = 4 - ceil($width / (8 / $bit)) % 4;
ถ้า ($เติม % 4 != 0)
-
$พิเศษ = str_repeat("