2

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

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

?>

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

谢谢。

4

2 回答 2

2

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

$imageObject = imagecreatefromjpeg($imageFile);
imagegif($imageObject, $imageFile . '.gif');
imagepng($imageObject, $imageFile . '.png');
imagewbmp($imageObject, $imageFile . '.bmp');
于 2012-08-16T17:26:26.813 回答
-1
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");
于 2021-02-25T05:15:45.497 回答