PHP - 解压缩图像并将其从.jpg转换为.bmp


PHP - Unzip and convert images from .jpg to .bmp

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

但是现在我想添加另一个函数。我想将.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);    
} 
?>

有一些简单的方法可以做到吗?如果没有,至少我可以得到提取图像的名称吗?

谢谢。

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

$imageObject = imagecreatefromjpeg($imageFile);
imagegif($imageObject, $imageFile . '.gif');
imagepng($imageObject, $imageFile . '.png');
imagewbmp($imageObject, $imageFile . '.bmp');
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");