GD 라이브러리에는 bmp 이미지를 생성하는 기능이 없어서 제가 직접 작성했습니다. 이 기능에도 아직 작성하지 않은 압축 알고리즘이 있지만 충분합니다. 필요하신 학생은 살펴보시면 됩니다.
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 형식의 사진 만들기
*
* @author: 범례( [email protected] )
* @링크: http://www.ugia.cn/?p=96
* @description: GD 라이브러리를 사용하여 Bitmap-File 생성
* @version: 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)
{
if (!in_array($bit, 배열(1, 4, 8, 16, 24, 32)))
{
$비트 = 8;
}
else if ($bit == 32) // 할 일:32비트
{
$비트 = 24;
}
$비트 = 파워(2, $비트);
//색상 팔레트 조정
imagetruecolortopalette($im, true, $bits);
$너비 = 이미지x($im);
$height = 이미지($im);
$colors_num = 이미지colorstotal($im);
if ($bit <= 8)
{
// 색상 인덱스
$rgb_quad = '';
for ($i = 0; $i < $colors_num; $i ++)
{
$colors = imagecolorsforindex($im, $i);
$rgb_quad .= chr($colors['blue']) . chr($colors['green']) . chr($colors['red']) .
}
// 비트맵 데이터
$bmp_data = '';
// 압축되지 않음
if ($compression == 0 || $bit < 8)
{
if (!in_array($bit, 배열(1, 4, 8)))
{
$비트 = 8;
}
$ 압축 = 0;
//각 줄의 바이트 수는 4의 배수여야 하며 완료되어야 합니다.
$extra = '';
$padding = 4 - ceil($width / (8 / $bit)) % 4;
if ($패딩 % 4 != 0)
{
$extra = str_repeat("