【问题标题】:PHP - Unzip and convert images from .jpg to .bmpPHP - 将图像从 .jpg 解压缩并转换为 .bmp
【发布时间】:2012-08-13 00:07:53
【问题描述】:

我有一个代码可以解压缩我上传到我的服务器的文件,它可以正常工作。

但现在我想添加另一个功能。我想将 .zip 文件中的所有图像(.zip 文件仅包含图像)从 .jpg 格式转换为 .bmp。

<?php
$file = $target_path1;

$path = $target_path2;

$zip = new ZipArchive;
$res = $zip->open($file);
if ($res === TRUE) {

  $zip->extractTo($path);
  $zip->close();
  unlink($target_path1);    
} 

?>

有什么简单的方法吗?如果没有,至少我可以获得提取图像的名称吗?

谢谢。

【问题讨论】:

标签: php image converter unzip


【解决方案1】:

您首先使用imagecreatefromjpeg() 从文件中创建一个图像对象。然后将该对象转储为不同的格式(例如使用imagegif()):

$imageObject = imagecreatefromjpeg($imageFile);
imagegif($imageObject, $imageFile . '.gif');
imagepng($imageObject, $imageFile . '.png');
imagewbmp($imageObject, $imageFile . '.bmp');

【讨论】:

    【解决方案2】:
    class ToBmp{
                    
        // new image width
        var $new_width;
    
        // new image height
        var $new_height;
    
        // image resources
        var $image_resource;
    
        function image_info($source_image){
            $img_info = getimagesize($source_image);
        
            switch ($img_info['mime']){
                case "image/jpeg": { $this->image_resource = imagecreatefromjpeg ($source_image); break; }
                case "image/gif": { $this->image_resource = imagecreatefromgif ($source_image); break; }
                case "image/png": { $this->image_resource = imagecreatefrompng ($source_image); break; }
                default: {die("unsupported image time");}
            }
        }
    
    
        public function imagebmp($file_path = ''){
        
            if(!$this->image_resource) die("cant not convert. image resource is null");
            $picture_width = imagesx($this->image_resource);
            $picture_height = imagesy($this->image_resource);
        
        
            if(!imageistruecolor($this->image_resource)){
                $tmp_img_reource = imagecreatetruecolor($picture_width,$picture_height);
                imagecopy($tmp_img_reource,$this->image_resource, 0, 0, 0, 0, $picture_width, $picture_height);
                imagedestroy($this->image_resource);
                $this->image_resource = $tmp_img_reource;
            
            }
        
        
            if((int) $this->new_width >0 && (int) $this->new_height > 0){
            
                $image_resized = imagecreatetruecolor($this->new_width, $this->new_height);
                imagecopyresampled($image_resized,$this->image_resource,0,0,0,0,$this->new_width,$this->new_height,$picture_width,$picture_height);
                imagedestroy($this->image_resource);
                $this->image_resource = $image_resized;
        
            }
        
            $result = '';
        
        
        
            $biBPLine = ((int) $this->new_width >0 &&(int)$this->new_height > 0) ? $this->new_width * 3 : $picture_width * 3;
            $biStride = ($biBPLine + 3) & ~3;
            $biSizeImage = ((int) $this->new_width >0 &&(int)$this->new_height > 0) ? $biStride * $this->new_height : $biStride * $picture_height;
            $bfOffBits = 54;
            $bfSize = $bfOffBits + $biSizeImage;
        
            $result .= substr('BM', 0, 2);
            $result .= pack ('VvvV', $bfSize, 0, 0, $bfOffBits);
            $result .= ((int) $this->new_width >0 &&(int)$this->new_height > 0) ? pack ('VVVvvVVVVVV', 40, $this->new_width, $this->new_height, 1, 24, 0, $biSizeImage, 0, 0, 0, 0) : pack ('VVVvvVVVVVV', 40, $picture_width, $picture_height, 1, 24, 0, $biSizeImage, 0, 0, 0, 0);
        
            $numpad = $biStride - $biBPLine;
        
            $h = ((int) $this->new_width >0 &&(int)$this->new_height > 0) ? $this->new_height : $picture_height;
            $w = ((int) $this->new_width >0 &&(int)$this->new_height > 0) ? $this->new_width : $picture_width;
        
    
            for ($y = $h - 1; $y >= 0; --$y) {
                for ($x = 0; $x < $w; ++$x) {
                    $col = imagecolorat ($this->image_resource, $x, $y);
                    $result .= substr(pack ('V', $col), 0, 3);
                }
                for ($i = 0; $i < $numpad; ++$i) {
                    $result .= pack ('C', 0);
                }
            }
        
        
        if($file_path == ''){
            
            header("Content-type: image/bmp");
            echo $result;
        } else {
            
            $fp = fopen($file_path,"wb");
            fwrite($fp,$result);
            fclose($fp);
            //=============
        }   
        return ;    
        }
    }
    
                                    $ToBMP = new ToBmp();
                                    $ToBMP->image_info('imgqr/'.$name.'image.png');
                                    $ToBMP->new_width  = 300;
                                    $ToBMP->new_height = 300;
                                    $ToBMP->imagebmp('imgqr/'.$name."image.bmp");
    

    【讨论】:

    • 欢迎来到 SO。感谢您的贡献。在 SO 上不鼓励仅代码转储。随着时间的推移,对高质量答案的支持会不断累积,未来的访问者可以从中学到一些可以解决他们自己的编码问题的东西。 SO 不是免费的编码服务。请edit 强调您的解决方案的关键点,并解释它如何解决 OP 的问题。此外,您代码的最后几行似乎缩进太多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2011-10-16
    • 2012-01-24
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多