【发布时间】:2014-11-20 04:29:48
【问题描述】:
在上传器上工作,并为其添加了一个 switch 语句,以将任何图像 .png、.gif、.bmp 转换为 jpg。
但它似乎不起作用,有人能解释一下为什么它通过开关并且仍然将文件格式保持为 .gif 或 png 的问题吗?
<?php
if (isset($_POST['addpart']))
{
$image = $_FILES['images']['tmp_name'];
$name = $_POST['username'];
$i = 0;
foreach($image as $key)
{
$fileData = pathinfo(basename($_FILES["images"]["name"][$i]));
$fileName[] = $name . '_' . uniqid() . '.' . $fileData['extension'];
move_uploaded_file($key, "image/" . end($fileName));
copy("image/" . end($fileName) , "image_thumbnail/" . end($fileName));
$images = "image_thumbnail/" . end($fileName);
$new_images = "image_thumbnail/" . end($fileName);
$width = 100; //*** Fix Width & Heigh (Autu caculate) ***//
$size = GetimageSize($images);
$height = round($width * $size[1] / $size[0]);
switch ($size[2])
{
case IMAGETYPE_GIF:
$images_orig = imagecreatefromgif($images);
break;
case IMAGETYPE_JPEG:
$images_orig = imagecreatefromjpeg($images);
break;
case IMAGETYPE_PNG:
$images_orig = imagecreatefrompng($images);
break;
default:
die("Unknown filetype");
}
//$images_orig = imagecreatefromjpeg($images);
$photoX = ImagesX($images_orig);
$photoY = ImagesY($images_orig);
$images_fin = ImageCreateTrueColor($width, $height);
ImageCopyResampled($images_fin, $images_orig, 0, 0, 0, 0, $width + 1, $height + 1, $photoX, $photoY);
ImageJPEG($images_fin, $new_images);
$i++;
}
echo 'Uploaded<br />';
echo 'Main Image - ' . $fileName[0] . '<br />';
echo 'Extra Image 1 - ' . $fileName[1] . '<br />';
echo 'Extra Image 2 - ' . $fileName[2] . '<br />';
echo '<hr>';
}
?>
【问题讨论】:
-
为什么将
$size传递给switch 语句并期望IMAGETYPE? -
@B-and-P:$size 是一个数组,$size[2] 是一个 PHP 图像类型常量,例如 IMAGETYPE_GIF。那部分应该可以工作。
-
@BobBrown 我在考虑使用 $size['mime'] 作为案例,但它仍然不起作用。
-
看起来您的
$fileName数组存储了原始扩展名,这就是您要回显的内容。 -
@B-and-P 我需要做什么才能让这个工作?