php将bmp格式图片转换成jpg格式程序

 代码如下 复制代码

function imagebmp($img,$file="",$rle=0)
{

$colorcount=imagecolorstotal($img);

$transparent=imagecolortransparent($img);
$istransparent=$transparent!=-1;

if($istransparent) $colorcount--;

if($colorcount==0) {$colorcount=0; $bitcount=24;};
if(($colorcount>0)and($colorcount<=2)) {$colorcount=2; $bitcount=1;};
if(($colorcount>2)and($colorcount<=16)) { $colorcount=16; $bitcount=4;};
if(($colorcount>16)and($colorcount<=256)) { $colorcount=0; $bitcount=8;};

                $width=imagesx($img);
                $height=imagesy($img);

                $zbytek=(4-($width/(8/$bitcount))%4)%4;

                if($bitcount<24) $palsize=pow(2,$bitcount)*4;

                $size=(floor($width/(8/$bitcount))+$zbytek)*$height+54;
                $size+=$palsize;
                $offset=54+$palsize;

                // bitmap file header
                $ret = 'bm';                        // header (2b)
                $ret .= int_to_dword($size);        // size of file (4b)
                $ret .= int_to_dword(0);        // reserved (4b)
                $ret .= int_to_dword($offset);        // byte location in the file which is first byte of image (4b)
                // bitmap info header
                $ret .= int_to_dword(40);        // size of bitmapinfoheader (4b)
                $ret .= int_to_dword($width);        // width of bitmap (4b)
                $ret .= int_to_dword($height);        // height of bitmap (4b)
                $ret .= int_to_word(1);        // biplanes = 1 (2b)
                $ret .= int_to_word($bitcount);        // bibitcount = {1 (mono) or 4 (16 clr ) or 8 (256 clr) or 24 (16 mil)} (2b)
                $ret .= int_to_dword($rle);        // rle compression (4b)
                $ret .= int_to_dword(0);        // width x height (4b)
                $ret .= int_to_dword(0);        // bixpelspermeter (4b)
                $ret .= int_to_dword(0);        // biypelspermeter (4b)
                $ret .= int_to_dword(0);        // number of palettes used (4b)
                $ret .= int_to_dword(0);        // number of important colour (4b)
                // image data

                $cc=$colorcount;
                $sl1=strlen($ret);
                if($cc==0) $cc=256;
                if($bitcount<24)
                   {
                    $colortotal=imagecolorstotal($img);
                     if($istransparent) $colortotal--;

                     for($p=0;$p<$colortotal;$p++)
                     {
                      $color=imagecolorsforindex($img,$p);
                       $ret.=inttobyte($color["blue"]);
                       $ret.=inttobyte($color["green"]);
                       $ret.=inttobyte($color["red"]);
                       $ret.=inttobyte(0); //reserved
                     };

                    $ct=$colortotal;
                  for($p=$colortotal;$p<$cc;$p++)
                       {
                      $ret.=inttobyte(0);
                      $ret.=inttobyte(0);
                      $ret.=inttobyte(0);
                      $ret.=inttobyte(0); //reserved
                     };
                   };

if($bitcount<=8)
{

 for($y=$height-1;$y>=0;$y--)
 {
  $bwrite="";
  for($x=0;$x<$width;$x++)
   {
   $color=imagecolorat($img,$x,$y);
   $bwrite.=decbinx($color,$bitcount);
   if(strlen($bwrite)==8)
    {
     $retd.=inttobyte(bindec($bwrite));
     $bwrite="";
    };
   };

  if((strlen($bwrite)<8)and(strlen($bwrite)!=0))
    {
     $sl=strlen($bwrite);
     for($t=0;$t<8-$sl;$t++)
      $sl.="0";
     $retd.=inttobyte(bindec($bwrite));
    };
 for($z=0;$z<$zbytek;$z++)
   $retd.=inttobyte(0);
 };
};

if(($rle==1)and($bitcount==8))
{
 for($t=0;$t<strlen($retd);$t+=4)
  {
   if($t!=0)
   if(($t)%$width==0)
    $ret.=chr(0).chr(0);

   if(($t+5)%$width==0)
   {
     $ret.=chr(0).chr(5).substr($retd,$t,5).chr(0);
     $t+=1;
   }
   if(($t+6)%$width==0)
    {
     $ret.=chr(0).chr(6).substr($retd,$t,6);
     $t+=2;
    }
    else
    {
     $ret.=chr(0).chr(4).substr($retd,$t,4);
    };
  };
  $ret.=chr(0).chr(1);
}
else
{
$ret.=$retd;
};

                if($bitcount==24)
                {
                for($z=0;$z<$zbytek;$z++)
                 $dopl.=chr(0);

                for($y=$height-1;$y>=0;$y--)
                 {
                 for($x=0;$x<$width;$x++)
                        {
                           $color=imagecolorsforindex($img,imagecolorat($img,$x,$y));
                           $ret.=chr($color["blue"]).chr($color["green"]).chr($color["red"]);
                        }
                 $ret.=$dopl;
                 };

                 };

  if($file!="")
   {
    $r=($f=fopen($file,"w"));
    $r=$r and fwrite($f,$ret);
    $r=$r and fclose($f);
    return $r;
   }
  else
  {
   echo $ret;
  };
};

/*
*------------------------------------------------------------
*                    imagecreatefrombmp
*------------------------------------------------------------
*            - reads image from a bmp file
*
*         parameters:  $file - target file to load
*
*            returns: image id
*/

function imagecreatefrombmp($file)
{
global  $currentbit, $echomode;

$f=fopen($file,"r");
$header=fread($f,2);

if($header=="bm")
{
 $size=freaddword($f);
 $reserved1=freadword($f);
 $reserved2=freadword($f);
 $firstbyteofimage=freaddword($f);

 $sizebitmapinfoheader=freaddword($f);
 $width=freaddword($f);
 $height=freaddword($f);
 $biplanes=freadword($f);
 $bibitcount=freadword($f);
 $rlecompression=freaddword($f);
 $widthxheight=freaddword($f);
 $bixpelspermeter=freaddword($f);
 $biypelspermeter=freaddword($f);
 $numberofpalettesused=freaddword($f);
 $numberofimportantcolors=freaddword($f);

if($bibitcount<24)
 {
  $img=imagecreate($width,$height);
  $colors=pow(2,$bibitcount);
  for($p=0;$p<$colors;$p++)
   {
    $b=freadbyte($f);
    $g=freadbyte($f);
    $r=freadbyte($f);
    $reserved=freadbyte($f);
    $palette[]=imagecolorallocate($img,$r,$g,$b);
   };

 

if($rlecompression==0)
{
   $zbytek=(4-ceil(($width/(8/$bibitcount)))%4)%4;

for($y=$height-1;$y>=0;$y--)
    {
     $currentbit=0;
     for($x=0;$x<$width;$x++)
      {
         $c=freadbits($f,$bibitcount);
       imagesetpixel($img,$x,$y,$palette[$c]);
      };
    if($currentbit!=0) {freadbyte($f);};
    for($g=0;$g<$zbytek;$g++)
     freadbyte($f);
     };

 };
};

if($rlecompression==1) //$bi_rle8
{
$y=$height;

$pocetb=0;

while(true)
{
$y--;
$prefix=freadbyte($f);
$suffix=freadbyte($f);
$pocetb+=2;

$echoit=false;

if($echoit)echo "prefix: $prefix suffix: $suffix<br>";
if(($prefix==0)and($suffix==1)) break;
if(feof($f)) break;

while(!(($prefix==0)and($suffix==0)))
{
 if($prefix==0)
  {
   $pocet=$suffix;
   $data.=fread($f,$pocet);
   $pocetb+=$pocet;
   if($pocetb%2==1) {freadbyte($f); $pocetb++;};
  };
 if($prefix>0)
  {
   $pocet=$prefix;
   for($r=0;$r<$pocet;$r++)
    $data.=chr($suffix);
  };
 $prefix=freadbyte($f);
 $suffix=freadbyte($f);
 $pocetb+=2;
 if($echoit) echo "prefix: $prefix suffix: $suffix<br>";
};

for($x=0;$x<strlen($data);$x++)
 {
  imagesetpixel($img,$x,$y,$palette[ord($data[$x])]);
 };
$data="";

};

};

if($rlecompression==2) //$bi_rle4
{
$y=$height;
$pocetb=0;

/*while(!feof($f))
 echo freadbyte($f)."_".freadbyte($f)."<br>";*/
while(true)
{
//break;
$y--;
$prefix=freadbyte($f);
$suffix=freadbyte($f);
$pocetb+=2;

$echoit=false;

if($echoit)echo "prefix: $prefix suffix: $suffix<br>";
if(($prefix==0)and($suffix==1)) break;
if(feof($f)) break;

while(!(($prefix==0)and($suffix==0)))
{
 if($prefix==0)
  {
   $pocet=$suffix;

   $currentbit=0;
   for($h=0;$h<$pocet;$h++)
    $data.=chr(freadbits($f,4));
   if($currentbit!=0) freadbits($f,4);
   $pocetb+=ceil(($pocet/2));
   if($pocetb%2==1) {freadbyte($f); $pocetb++;};
  };
 if($prefix>0)
  {
   $pocet=$prefix;
   $i=0;
   for($r=0;$r<$pocet;$r++)
    {
    if($i%2==0)
     {
      $data.=chr($suffix%16);
     }
     else
     {
      $data.=chr(floor($suffix/16));
     };
    $i++;
    };
  };
 $prefix=freadbyte($f);
 $suffix=freadbyte($f);
 $pocetb+=2;
 if($echoit) echo "prefix: $prefix suffix: $suffix<br>";
};

for($x=0;$x<strlen($data);$x++)
 {
  imagesetpixel($img,$x,$y,$palette[ord($data[$x])]);
 };
$data="";

};

};

 if($bibitcount==24)
{
 $img=imagecreatetruecolor($width,$height);
 $zbytek=$width%4;

   for($y=$height-1;$y>=0;$y--)
    {
     for($x=0;$x<$width;$x++)
      {
       $b=freadbyte($f);
       $g=freadbyte($f);
       $r=freadbyte($f);
       $color=imagecolorexact($img,$r,$g,$b);
       if($color==-1) $color=imagecolorallocate($img,$r,$g,$b);
       imagesetpixel($img,$x,$y,$color);
      }
    for($z=0;$z<$zbytek;$z++)
     freadbyte($f);
   };
};
return $img;

};

fclose($f);

};

 

 

/*
* helping functions:
*-------------------------
*
* freadbyte($file) - reads 1 byte from $file
* freadword($file) - reads 2 bytes (1 word) from $file
* freaddword($file) - reads 4 bytes (1 dword) from $file
* freadlngint($file) - same as freaddword($file)
* decbin8($d) - returns binary string of d zero filled to 8
* retbits($byte,$start,$len) - returns bits $start->$start+$len from $byte
* freadbits($file,$count) - reads next $count bits from $file
* rgbtohex($r,$g,$b) - convert $r, $g, $b to hex
* int_to_dword($n) - returns 4 byte representation of $n
* int_to_word($n) - returns 2 byte representation of $n
*/

function freadbyte($f)
{
 return ord(fread($f,1));
};

function freadword($f)
{
 $b1=freadbyte($f);
 $b2=freadbyte($f);
 return $b2*256+$b1;
};

function freadlngint($f)
{
return freaddword($f);
};

function freaddword($f)
{
 $b1=freadword($f);
 $b2=freadword($f);
 return $b2*65536+$b1;
};

 

function retbits($byte,$start,$len)
{
$bin=decbin8($byte);
$r=bindec(substr($bin,$start,$len));
return $r;

};

 

$currentbit=0;
function freadbits($f,$count)
{
 global $currentbit,$smode;
 $byte=freadbyte($f);
 $lastcbit=$currentbit;
 $currentbit+=$count;
 if($currentbit==8)
  {
   $currentbit=0;
  }
 else
  {
   fseek($f,ftell($f)-1);
  };
 return retbits($byte,$lastcbit,$count);
};

 

function rgbtohex($red,$green,$blue)
  {
   $hred=dechex($red);if(strlen($hred)==1) $hred="0$hred";
   $hgreen=dechex($green);if(strlen($hgreen)==1) $hgreen="0$hgreen";
   $hblue=dechex($blue);if(strlen($hblue)==1) $hblue="0$hblue";
   return($hred.$hgreen.$hblue);
  };

        function int_to_dword($n)
        {
                return chr($n & 255).chr(($n >> 8) & 255).chr(($n >> 16) & 255).chr(($n >> 24) & 255);
        }
        function int_to_word($n)
        {
                return chr($n & 255).chr(($n >> 8) & 255);
        }

function decbin8($d)
{
return decbinx($d,8);
};

function decbinx($d,$n)
{
$bin=decbin($d);
$sbin=strlen($bin);
for($j=0;$j<$n-$sbin;$j++)
 $bin="0$bin";
return $bin;
};

function inttobyte($n)
{
return chr($n);
};

//实例方法

 代码如下 复制代码
include_once('bmp.php');
$image=imagecreatefrombmp('a.bmp');
imagejpeg($image,'a.jpeg');
imagedestroy($image);

 

时间: 2024-11-17 18:36:11

php将bmp格式图片转换成jpg格式程序的相关文章

win7系统下png图片转换成jpg格式的方法

  win7系统下png图片转换成jpg格式的方法            方法一:通过重命名的方法转换. 1.在电脑中找到要转换成jpg格式的png图片; 2.然后鼠标右键点击该png图片,在弹出的菜单中,点击"重命名"; 3.然后在重命名的图片输入框里,如下图点击选择png; 4.接下来如下图将png直接修改成jpg; 5.将png修改成jpg后,在修改输入框外边,点击下鼠标,这时png图片的格式即成功修改成jpg格式了.

win7操作系统把pdf格式文件转换成ppt格式的方法

  大家都知道,pdf格式的文件采用了图文格式,但是一些用户想要把pdf格式文件转换成ppt格式,让文件表达的更加生动,Power Point简称ppt,是一种演示文稿图形程序.那么win7操作系统如何把pdf格式文件转换成ppt格式?或者其他格式呢?比如TXT.Word等等.今天小编来给大家介绍win7操作系统把pdf格式文件转换成ppt格式的方法. 具体方法如下: 1.下载安装pdf转换成ppt转换器工具,大家可以直接百度搜索,网络上有相当多的下载资源; 2.双击快捷方式,进入主界面后,我们

加密-公钥(XML格式)转换成PEM格式

问题描述 公钥(XML格式)转换成PEM格式 iOS开发,加密方式是RSA,在请求数据后返回的格式是XML格式的公钥,但是要转换成PEM格式才可以参于编译,我知道有一个网站https://superdry.apphb.com/tools/online-rsa-key-converter给大家做个参考,但是这往往是不太安全的,我需要可将xml格式的公钥转换成pem格式.查了4.5天的资料,难道真的没有这种方法吗? 转之前: xA7SEU+e0yQH5rm9kbCDN9o3aPIo7HbP7tX6W

java如何将视频格式的转换成MP4格式

问题描述 java如何将视频格式的转换成MP4格式 如题,java怎么把.avi,.flv,.mov,.flw....等格式的视频转换成MP4, 有什么比较好的工具,ffmpeg网上全是将其他转换为flv的,但是flv手机 端不兼容,求方案.... 解决方案 我把我参考的源码demo地址:http://download.csdn.net/detail/sweetloveft/7508747 解决方案二: 如何将qlv格式的腾讯视频转换为mp4格式 解决方案三: 参照:http://blog.cs

怎么把图片转换成ico格式

  方法1 直接改后缀名 首先看一下你的图片是什么格式: 如果是bmp格式的,直间看第④步操作; 如果不是把图片格式先转换成bmp格式. 首先在图片上鼠标"右键",选择"打开方式"---"windows图片和传真查看器" 打开后点击"保存"图标 然后在保存类型选择"bmp"格式,点击"保存",格式就转换成"bmp"的了. 接下来,我们就把"11.bmp&qu

将CAJ、KDH、NH格式文件转换成WORD格式的方法教程【多图】

准备的软件工具 CAJViewer 7完整版 (带OCR组件) PDF虚拟打印机(本文以PDF factory 为例) OCR识别软件 (本文以ABBYY finereader 9为例) 步骤/方法 1 用CAJviewer 7打开你要转换的文件,如下图所示 如果我们需要第一段的内容,那么我们需要点击CAJViewer 7自带的OCR功能键,如下图 图中红色方框框出的按钮就是OCR识别按钮(如果你使用的是精简版的CAJviewer,那么这个按钮是灰色的,不可用的),我们点击一下鼠标就会变成十字形

ppt格式怎么转换成swf格式

往往我们在做演示都是用到幻灯片,但是有的时候用flash格式颜色效果可能更好,发布PPT,如果有演示,更直观,不仅能增加访问率,更能提高下载量,那如何将ppt格式直接转换成flash动画演示呢? 工具/原料 · powerpoint幻灯片 · iSpring Free 6.2.0 工具 32位下载 64位下载 方法/步骤 1. iSpring Free 是一款免费的 PowerPoint 转 Flash/SWF 工具,可以轻松地将 PPT 演示文档转换为对 Web 友好的 Flash 影片格式(

把普通图片转换成.svg格式

1.新建文本文件,把下面的代码复制/粘贴 <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG /1.1/DTD/svg 11.dtd"> <svg xmlns=&q

怎么将pdf格式文件转换成txt格式

  常在网上找一些资料,但是通常很多好的资料都为pdf格式的文件.对于一个电脑小白来说,pdf格式的文件也许会很陌生,第一个面临的就是pdf格式的文件怎么打开?顺便解答一下:pdf格式的文件必须用相应的pdf阅读器才能打开哦.因为我们发现,现在一般的pdf阅读器打开pdf文件后并不支持复制pdf文件的内容,这个时候我们我们就只有转换格式来达到目的了! 下面给大家推荐的一款工具是汉王PDF OCR,汉王 PDF OCR 提供 PDF 自动转换 RTF/TXT 功能,同时支持TIFF/JPEG/GI