我有一个解压缩上传到我服务器的文件的代码,它没有任何问题。
但现在我想添加另一个功能。我想将.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);
}
?>
有一些简单的方法吗?如果没有,至少我能得到提取图像的名称吗?
感谢。
答案 0 :(得分:2)
首先使用imagecreatefromjpeg()从文件中创建一个图像对象。然后,您将该对象转储为不同的格式(例如,使用imagegif()):
$imageObject = imagecreatefromjpeg($imageFile);
imagegif($imageObject, $imageFile . '.gif');
imagepng($imageObject, $imageFile . '.png');
imagewbmp($imageObject, $imageFile . '.bmp');
答案 1 :(得分:-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");