<?php
function ConvertBMP2GD($src, $dest = false) {
if(!($src_f = fopen($src, "rb"))) {
return false;
}
if(!($dest_f = fopen($dest, "wb"))) {
return false;
}
$header = unpack("vtype/Vsize/v2reserved/Voffset", fread($src_f,14));
$info = unpack("Vsize/Vwidth/Vheight/vplanes/vbits/Vcompression/Vimagesize/Vxres/Vyres/Vncolor/Vimportant",fread($src_f, 40));
extract($info);
extract($header);
if($type != 0x4D42) { // signature "BM"
return false;
}
$palette_size = $offset - 54;
$ncolor = $palette_size / 4;
$gd_header = "";
// true-color vs. palette
$gd_header .= ($palette_size == 0) ? "\xFF\xFE" : "\xFF\xFF";
$gd_header .= pack("n2", $width, $height);
$gd_header .= ($palette_size == 0) ? "\x01" : "\x00";
if($palette_size) {
$gd_header .= pack("n", $ncolor);
}
// no transparency
$gd_header .= "\xFF\xFF\xFF\xFF";
fwrite($dest_f, $gd_header);
if($palette_size) {
$palette = fread($src_f, $palette_size);
$gd_palette = "";
$j = 0;
while($j < $palette_size) {
$b = $palette{$j++};
$g = $palette{$j++};
$r = $palette{$j++};
$a = $palette{$j++};
$gd_palette .= "$r$g$b$a";
}
$gd_palette .= str_repeat("\x00\x00\x00\x00", 256 - $ncolor);
fwrite($dest_f, $gd_palette);
}
$scan_line_size = (($bits * $width) + 7) >> 3;
$scan_line_align = ($scan_line_size & 0x03) ? 4 - ($scan_line_size &
0x03) : 0;
for($i = 0, $l = $height - 1; $i < $height; $i++, $l--) {
// BMP stores scan lines starting from bottom
fseek($src_f, $offset + (($scan_line_size + $scan_line_align) *
$l));
$scan_line = fread($src_f, $scan_line_size);
if($bits == 24) {
$gd_scan_line = "";
$j = 0;
while($j < $scan_line_size) {
$b = $scan_line{$j++};
$g = $scan_line{$j++};
$r = $scan_line{$j++};
$gd_scan_line .= "\x00$r$g$b";
}
} else if($bits == 8) {
$gd_scan_line = $scan_line;
} else if($bits == 4) {
$gd_scan_line = "";
$j = 0;
while($j < $scan_line_size) {
$byte = ord($scan_line{$j++});
$p1 = chr($byte >> 4);
$p2 = chr($byte & 0x0F);
$gd_scan_line .= "$p1$p2";
}
$gd_scan_line = substr($gd_scan_line, 0, $width);
} else if($bits == 1) {
$gd_scan_line = "";
$j = 0;
while($j < $scan_line_size) {
$byte = ord($scan_line{$j++});
$p1 = chr((int) (($byte & 0x80) != 0));
$p2 = chr((int) (($byte & 0x40) != 0));
$p3 = chr((int) (($byte & 0x20) != 0));
$p4 = chr((int) (($byte & 0x10) != 0));
$p5 = chr((int) (($byte & 0x08) != 0));
$p6 = chr((int) (($byte & 0x04) != 0));
$p7 = chr((int) (($byte & 0x02) != 0));
$p8 = chr((int) (($byte & 0x01) != 0));
$gd_scan_line .= "$p1$p2$p3$p4$p5$p6$p7$p8";
}
$gd_scan_line = substr($gd_scan_line, 0, $width);
}
fwrite($dest_f, $gd_scan_line);
}
fclose($src_f);
fclose($dest_f);
return true;
}
function imagecreatefrombmp($filename) {
$tmp_name = tempnam("/tmp", "GD");
if(ConvertBMP2GD($filename, $tmp_name)) {
$img = imagecreatefromgd($tmp_name);
unlink($tmp_name);
return $img;
}
return false;
}
//调试图片转换
$img = imagecreatefrombmp("a.bmp");
imagejpeg($img, "q.jpg");
?>
分享到:
相关推荐
将bmp图片转换为其他各种格式的bmp图片,方便开发
描述中提到的"bmp jpg 格式相互转换"意味着这个程序可以将BMP格式的图片转换为JPG格式,同时也能将JPG格式的图片转换为BMP格式。运行界面的链接虽然在这里无法查看,但通常会提供一个用户友好的图形界面,用户只需...
本篇文章将深入探讨如何使用C++将BMP(Bitmap)格式的图片转换为RAW纯数据格式。BMP是一种常见的位图格式,通常用于存储数字图像,而RAW格式则保存了相机传感器捕获的原始数据,通常用于专业摄影后期处理。 BMP格式...
可以将BMP图片转换为C语言数组,转换好的数组,图片的第一行数据在数组的最后一行,32bit的数据顺序为: pixel[0] = truecolor_logo_data[tmp+m+2]; pixel[1] = truecolor_logo_data[tmp+m+3]; pixel[2] = ...
然而,在嵌入式系统开发中,由于资源限制,通常需要将高容量的BMP图片转换为更便于处理的二进制BIN文件。"BMP图片转换为BIN的软件"就是为此目的而设计的工具。 该软件的主要功能是将BMP文件转换成BIN文件,便于将...
批量快速将多张bmp图片转换为bin文件,bmp图片位深度为24bit,bin文件可选择8bit(RGB323)、16bit(RGB565)、24bit(RGB888) 输出,用于烧录到 外部flash,单片机去读取数据显示图像。因为输出每张bmp图片所在flash里的...
本篇文章将深入探讨“bmp图片转换成bin文件”的过程,以及BMP2RAW工具如何实现这一转换并生成相应的.C文件。 首先,我们要了解BMP(Bitmap)文件格式。BMP是微软公司定义的一种位图图形文件格式,广泛用于Windows和...
BMP图片转换软件是一种工具,主要用于将BMP格式的图像文件转换为特定的logo设计,以适应嵌入式系统的开发需求。在嵌入式系统中,由于资源限制,往往需要优化和定制图形资源,logo作为品牌标识,其在硬件设备上的显示...
总之,"PNG图片转换成BMP图片格式"是一个常见的图像处理需求,这个工具简化了这个过程,使得用户可以轻松地在两种格式之间切换,适应不同的应用场景。在日常工作中,理解这两种格式的特点和转换原理,有助于我们更好...
在IT行业中,图像处理是...总之,"bmp格式转为rgb565格式图片转换工具"是图像处理领域中一个实用的工具,它简化了从标准BMP格式向嵌入式系统友好格式的转换过程,对于优化嵌入式系统的显示性能和资源利用具有重要意义。
c语言数字图像处理(一):bmp图片格式及灰度图片转换rgb2grayscale c语言数字图像处理(一):bmp图片格式及灰度图片转换rgb2grayscale c语言数字图像处理(一):bmp图片格式及灰度图片转换rgb2grayscale c语言...
图片转换工具 jpg .jpeg .gif .png .bmp图片格式 图片格式转换器 格式PNG、JPG、GIF、BMP、tiff互相转换工具
"VC++6.0中将JPG格式图片转换成BMP格式" 在VC++6.0中将JPG格式图片转换成BMP格式需要使用GDI+,以下是实现思路: 一、配置GDI开发环境 1. 下载GDI+ SDK for Visual C++ 6.0,并将Includes和Lib文件夹中的文件分别...
总的来说,BMP图片转换软件是为了满足用户对不同图像格式需求而设计的工具,通过它可以轻松地将BMP图像转换成其他格式,以适应不同的应用场景和设备。在日常工作中,理解和掌握BMP格式及其转换方法,对于图像处理和...
在这种情况下,将BMP图片转换为C语言数组是一种常见且实用的方法,可以使得程序在非OS环境下依然能显示图像。本文将深入探讨如何将BMP图片转化为C代码可用的二维数组,以及相关的技术细节。 BMP(Bitmap)是Windows...
本篇将详细介绍如何使用 C 语言,通过两步简单操作将 RAW 格式的图片转换为 BMP 格式。 第一步:理解 RAW 和 BMP 文件结构 1. RAW 文件:RAW 格式没有统一的标准,不同相机厂商有各自的格式。但一般来说,它包含...
本教程将专注于一个特定的转换过程:将10位的CCD纯数据格式RAW文件转化为8位的BMP格式文件。首先,我们需要理解这两种格式的基础知识。 **RAW格式**: RAW图像格式是一种未经处理的数据格式,它直接记录了相机...
将BMP图片转换为RGB数组是图像处理中常见的操作,特别是在编程环境中,如VC++(Visual C++),这种操作有助于对图像进行分析、编辑或进一步处理。以下我们将详细探讨如何在VC++环境下实现这一过程。 首先,我们需要...
在压缩包中的“图片格式转换bmp-jpg”文件夹里,应该包含了这个转换功能的完整源代码和可能的示例文件。你可以下载并研究这些文件,以便更深入地学习和实践图片格式转换技术。通过这种方式,你不仅可以解决在Power...
"BMP图片转换成AD封装库"这个主题涉及到了将位图图像(BMP格式)转化为AD软件中的封装库组件。封装库是AD中的一个重要组成部分,它包含了电子元器件的物理形状和引脚分布信息,用于在PCB(印刷电路板)设计时放置和...