php转换bmp图片格式为jpg格式

进行图片格式转换前,先输出phpinfo()查看php库信息,查看gd扩展库是否开启,若未开启,打开php.ini文件,用查找工具找到extension=php_gd2.dll,把extension=php_gd2.dll 前面的【;】,就可以了

这里转换成为jpg格式需要JPEG Support支持,png需要 PNG Support支持,对应的先检查自己转的格式是否支持

imagejpeg()函数失败也许是你的文件夹权限问题,得多注意

可以先用function_exist()函数ImageCreateFromBMP检查是否存在,下例中的ImageCreateFromBMP_private用来代替ImageCreateFromBMP方法

示例代码如下:

<?php
$srcFile =‘test.bmp‘;//需要转换的图片
$info = getimagesize($srcFile);
$srcFileExt=$info[‘mime‘];
//判断是否是bmp格式
if($srcFileExt==‘image/x-ms-bmp‘){
    $result = changeBMPtoJPG($srcFile);
    if($result){
        echo $result;
    }else{
        echo "转换失败!";
    }
}else{
    echo "该图片不是bmp格式";
}
exit;

function ImageCreateFromBMP_private($filename) {
    if (!$f1 = fopen($filename, "rb"))
        return false;

    $FILE = unpack("vfile_type/Vfile_size/Vreserved/Vbitmap_offset", fread($f1, 14));
    if ($FILE[‘file_type‘] != 19778)
        return false;

    $BMP = unpack(‘Vheader_size/Vwidth/Vheight/vplanes/vbits_per_pixel‘ .
        ‘/Vcompression/Vsize_bitmap/Vhoriz_resolution‘ .
        ‘/Vvert_resolution/Vcolors_used/Vcolors_important‘, fread($f1, 40));
    $BMP[‘colors‘] = pow(2, $BMP[‘bits_per_pixel‘]);
    if ($BMP[‘size_bitmap‘] == 0)
        $BMP[‘size_bitmap‘] = $FILE[‘file_size‘] - $FILE[‘bitmap_offset‘];
    $BMP[‘bytes_per_pixel‘] = $BMP[‘bits_per_pixel‘] / 8;
    $BMP[‘bytes_per_pixel2‘] = ceil($BMP[‘bytes_per_pixel‘]);
    $BMP[‘decal‘] = ($BMP[‘width‘] * $BMP[‘bytes_per_pixel‘] / 4);
    $BMP[‘decal‘] -= floor($BMP[‘width‘] * $BMP[‘bytes_per_pixel‘] / 4);
    $BMP[‘decal‘] = 4 - (4 * $BMP[‘decal‘]);
    if ($BMP[‘decal‘] == 4)
        $BMP[‘decal‘] = 0;

    $PALETTE = array();
    if ($BMP[‘colors‘] < 16777216) {
        $PALETTE = unpack(‘V‘ . $BMP[‘colors‘], fread($f1, $BMP[‘colors‘] * 4));
    }

    $IMG = fread($f1, $BMP[‘size_bitmap‘]);
    $VIDE = chr(0);

    $res = imagecreatetruecolor($BMP[‘width‘], $BMP[‘height‘]);
    $P = 0;
    $Y = $BMP[‘height‘] - 1;
    while ($Y >= 0) {
        $X = 0;
        while ($X < $BMP[‘width‘]) {
            switch ($BMP[‘bits_per_pixel‘]) {
                case 32:
                    $COLOR = unpack("V", substr($IMG, $P, 3) . $VIDE);
                    break;
                case 24:
                    $COLOR = unpack("V", substr($IMG, $P, 3) . $VIDE);
                    break;
                case 16:
                    $COLOR = unpack("n", substr($IMG, $P, 2));
                    $COLOR[1] = $PALETTE[$COLOR[1] + 1];
                    break;
                case 8:
                    $COLOR = unpack("n", $VIDE . substr($IMG, $P, 1));
                    $COLOR[1] = $PALETTE[$COLOR[1] + 1];
                    break;
                case 4:
                    $COLOR = unpack("n", $VIDE . substr($IMG, floor($P), 1));
                    if (($P * 2) % 2 == 0)
                        $COLOR[1] = ($COLOR[1] >> 4);
                    else
                        $COLOR[1] = ($COLOR[1] & 0x0F);
                    $COLOR[1] = $PALETTE[$COLOR[1] + 1];
                    break;
                case 1:
                    $COLOR = unpack("n", $VIDE . substr($IMG, floor($P), 1));
                    if (($P * 8) % 8 == 0)
                        $COLOR[1] = $COLOR[1] >> 7;
                    elseif (($P * 8) % 8 == 1)
                        $COLOR[1] = ($COLOR[1] & 0x40) >> 6;
                    elseif (($P * 8) % 8 == 2)
                        $COLOR[1] = ($COLOR[1] & 0x20) >> 5;
                    elseif (($P * 8) % 8 == 3)
                        $COLOR[1] = ($COLOR[1] & 0x10) >> 4;
                    elseif (($P * 8) % 8 == 4)
                        $COLOR[1] = ($COLOR[1] & 0x8) >> 3;
                    elseif (($P * 8) % 8 == 5)
                        $COLOR[1] = ($COLOR[1] & 0x4) >> 2;
                    elseif (($P * 8) % 8 == 6)
                        $COLOR[1] = ($COLOR[1] & 0x2) >> 1;
                    elseif (($P * 8) % 8 == 7)
                        $COLOR[1] = ($COLOR[1] & 0x1);
                    $COLOR[1] = $PALETTE[$COLOR[1] + 1];
                    break;
                default:
                    return false;
                    break;
            }

            imagesetpixel($res, $X, $Y, $COLOR[1]);
            $X++;
            $P += $BMP[‘bytes_per_pixel‘];
        }
        $Y--;
        $P+=$BMP[‘decal‘];
    }
    fclose($f1);
    return $res;
}

function changeBMPtoJPG($srcPathName){
    $srcFile=$srcPathName;
    $dstFile = str_replace(‘.bmp‘, ‘.jpg‘, $srcPathName);
    $photoSize = GetImageSize($srcFile);
    $pw = $photoSize[0];
    $ph = $photoSize[1];
    $dstImage = ImageCreateTrueColor($pw, $ph);
    $white = imagecolorallocate($dstImage, 255, 255, 255);
    //用 $white 颜色填充图像
    imagefill( $dstImage, 0, 0, $white);
    //读取图片
    $srcImage = ImageCreateFromBMP_private($srcFile);
    //合拼图片  

    imagecopyresampled($dstImage, $srcImage, 0, 0, 0, 0, $pw, $ph, $pw, $ph);
    $judge = imagejpeg($dstImage, $dstFile, 90);
    imagedestroy($dstImage);
    if($judge){
        return $dstFile;
    }else{
        return false;
    }
}

?>
时间: 2024-10-06 16:21:15

php转换bmp图片格式为jpg格式的相关文章

VC++使用CImage在内存中Jpeg转换Bmp图片

VC++中Jpeg与Bmp图片格式互转应该是会经常遇到,Jpeg相比Bmp在图片大小上有很大优势. 本文重点介绍使用现有的CImage类在内存中进行转换,不需要保存为文件,也不需要引入第三方库. Libjpeg库在8以后也支持了内存读取和转换,不过使用起来较为麻烦,还需要手动编译,用CImage类完全可以实现,代码更简洁. 实现方法: VC++对Jpeg.Png图片的操作主要使用CImage,相信很多人用过CImage的Load和Save函数从文件读取或保存Jpeg或Png格式的文件,这两个重载

VC++使用CImage在内存中Bmp转换Jpeg图片

之前写了一篇<VC++使用CImage在内存中Jpeg转换Bmp图片>,通过CImage实现了在内存中Jpeg转Bmp. 既然Jpeg能转Bmp,那CImage也支持Bmp转Jpeg,与上一篇文章依赖CImage的Load函数相反,Bmp转Jpeg通过Save函数实现: 使用的也是IStream接口的函数重载,具体可以参考MSDN:http://msdn.microsoft.com/zh-cn/library/d06f3fhw.aspx 下面贴出使用CImage在内存中Bmp转换Jpeg的代码

教你怎样把PDF文件转换成图片

将一些PDF文件内容转换成为图片,这在办公中经常会遇到,不管是什么类型的文档要转换成图片,用截图方式是不能很快完成的,尤其是PDF这种文档,有些页面就有很多,那PDF文件如何转换成JPG格式图片. 将PDF转换成图片,一般是以文档的页面为单位,每个页面内容转换成一张图片,而且需要使每张图片的尺寸相同.那么在转换一些页面较少的PDF文档时,可以把PDF文件通过在线转换应用进行转换. 通过在线pdf转换成图片需要转换的PDF文档进行上传,在线转换完成后,将转换好图片的压缩包下载下来就可以了. 转换一

小技巧—如何将pdf文件转换成图片

有时候将文档内容发送给别人查看时,如果不想文档被修改或者复制,可以吧文档转换成一张张的图片,这样就可以了.不同的文档有不同的方法,如果转换的文档是pdf文件该怎么操作呢? 如果文档内容较少,那么不用借助任何工具,直接通过在线转换,就能把pdf转为图片. 在线转换是通过一些网页应用,来对文档进行转换操作的.进入到在线转换工具后,选择对应的转换类型,然后把要转换文档进行上传,等处理完成后下载下来就可以了. 工具:PDF转换成图片在线http://app.xunjiepdf.com/pdf2jpg 通

图片bmp格式转换为jpg格式

一下代码经过个人测试,可用 注意:将jpg格式的图片重命名为bmp格式,在该代码中是不能转换的,会报空值异常!而且IE10是显示不了这样的图片的 import java.awt.Image; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.awt.image.MemoryImageSource; import java.io.FileInputStream; import java.io.File

.NET图片操作类,包含图片格式转换、图片缩放、 文字水印、图片水印、路径转换

using System;using System.Collections.Generic;using System.Text;using System.IO;using System.Drawing.Imaging;using System.Drawing;using System.Web;namespace ZC.Utils{  public  static class ImageHelper  { #region 图片格式转换      /// <summary>      /// 图片

PDF怎么转换成图片格式:手把手教你学会

PDF文件是一中安全性比较高的文件在办公中也是经常能够用到的,它不仅安全性高,而且也很难进行编辑,而图片格式确是一种很容易进行编辑的,想要将PDF转换成图片格式并非是一件难事,那么PDF怎么转换成图片格式,想知道的话就跟着下面的文章继续往下看吧,手把手教你学会.PDF怎么转换成图片格式?下面是PDF转换成图片的案例演示:借助软件:迅捷PDF转换器步骤一:首先先将迅捷PDF转换器下载到电脑中去,之后可双击运行软件步骤二:进入到软件的功能页面,可点击"PDF转成其他文件"点击下方的&quo

怎么转换常用图片格式,jpg格式怎么转换

图片的格式是分很多种的,我们最常用的图片格式大概就是jpg.png.bmp,但是可能由于各种需要需要转换格式,比如我们在上传自己的×××件的时候,可能会有专门允许的格式,那这个时候就需要将照片转换成需要的格式了,那怎么转换常用图片格式,jpg格式怎么转换呢? 1.首先今天要说的是一个电脑端的转换工具--迅捷图片格式转换器,可以相互转换常用图片格式,也可以将heic格式转为常用格式,并且可以压缩图片: 2.默认的界面就是常用图片格式的转换,如果转换一张图片的话点击"添加图片",批量转换格

BMP文件格式,RGB之间格式转换 碰到坑,MARK

很多人在转储bmp文件的时候,会出现各种各样的问题,特别是抓屏的时候,经常保存下来的图片 怪怪的,偏差很大!比如下面: 有时候,明明感觉自己是对的,但往往结果很让人抓狂. 这种情况一般是对bmp文件格式理解不对,或者没有透彻导致,当然至少是显示出来,所以大部分是对的,只是某些地方出错! 网上也有很多bmp文件格式,但都说得不够透彻,导致实际总要走些弯路. bmp是常见图片格式,使用非常广泛.近期在处理ui库的时候,了解下bmp格式,也发现其中一些坑,记录下. bmp格式很简单,网上搜索一堆,百科