图像重采样仅适用于JPEG文件

时间:2013-03-16 19:29:40

标签: php

我已经实现了一些代码,允许我将图像重新采样到不同的大小,尽管目前它似乎只适用于JPEG。我想我必须添加imagepng($image_p, null, 100);类型的代码片段,尽管这似乎仍然失败了。至于标题我不太确定如何允许这三种文件类型?

<?php
// The file
$filename = 'Channel-Art-Spec.png';

// Set a maximum height and width
$width = 300;
$height = 300;

// Content type
header('Content-Type: image/jpeg');

// Get new dimensions
list($width_orig, $height_orig) = getimagesize($filename);

$ratio_orig = $width_orig/$height_orig;

if ($width/$height > $ratio_orig) {
   $width = $height*$ratio_orig;
} else {
   $height = $width/$ratio_orig;
}

// Resample
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig,         $height_orig);

// Output
imagejpeg($image_p, null, 100);
?>

2 个答案:

答案 0 :(得分:0)

您需要为正在阅读的文件类型使用适当的函数,而不是imagecreatefromjpeg()

getimagesize()检查类型并在IMAGETYPE_XXX数组(see the documentation)中提供imageinfo

您也可以使用效率稍低的imagecreatefromstring(file_get_contents($filename))

答案 1 :(得分:0)

您的代码仅适用于JPEG图像的原因是代码中的以下行:

$image = imagecreatefromjpeg($filename);

对于PNG图像,请使用imagecreatefrompng