0
我們有一些相當老的代碼,它們可以上傳,調整大小然後保存圖像,以便在我們的CMS中使用它。PHP Image上傳器將PNG轉換爲8位
這一切工作正常,除非我們上傳一個24位PNG,由於某種原因將其轉換爲8位PNG,無論如何修復這個?
附件中是有問題的功能:
function resize_png($origfile,$newfile,$endh,$endw,$imagequal,$crop,$watermrkimg=false) {
$imagequal = floor($imagequal/10); //needed to give a quality of between 0-9 as required by php5 (php4 allowed 0-99)
$return_val = 1;
if (!$return_val = (($img = ImageCreateFromPNG ($origfile)) && $return_val == 1) ? "1" : "0") {
quit_on_error ("Your picture is corrupt, please try resaving it or uploading another picture","Image Error",'1');
}
// 1. get transparent colour
$colorTransparent = imagecolortransparent($img);
$origw = imagesx ($img); // Original image width
$origh = imagesy ($img); // Original image height
$ratiow = $origw/$endw; //get ratios of current dimension against min dimension
$ratioh = $origh/$endh;
if ($ratiow == $ratioh) { //if image is already correctly proportioned
$neww = round($origw/$ratiow);
$newh = round($origh/$ratioh);
$offsetw = '0';
$offseth = '0';
}
elseif ($ratioh < $ratiow) { // if image is wide
if ($crop == '1')
{
$neww = round($origw/$ratioh); // this will be too wide
$newh = round($origh/$ratioh); // this will be perfect
}
else {
$neww = round($origw/$ratiow); // this will be perfect
$newh = round($origh/$ratiow); // this will be to short
}
$offseth = '0'; // as height perfect
$offsetw = round(($neww - $endw)/2); // horizontally centred
}
else { // if image is tall
if ($crop == '1')
{
$neww = round($origw/$ratiow); // this will be perfect
$newh = round($origh/$ratiow); // this will be too tall
}
else
{
$neww = round($origw/$ratioh); // this will be too thin
$newh = round($origh/$ratioh); // this will be perfect
}
$offsetw = '0'; // as width perfect
$offseth = round(($newh - $endh)/2); // vertically centred
}
if($crop != '1') // If original is smaller then don't resize at all, then quality will be better
{ // ... unless of course we are cropping for a thumbnail, then we want to be resized up ...
if (($origw < $neww) && ($origh < $newh))
{
$neww = $origw;
$newh = $origh;
}
}
$resized_id = ImageCreate($neww , $newh); // create an image to resize the image proportionally
// 2. Set transparent colour
imagepalettecopy($resized_id, $img);
imagefill($resized_id,0,0,$colorTransparent);
imagecolortransparent($resized_id,$colorTransparent);
ImageCopyResampled($resized_id, $img, // resize image - no cropping, so may be too big in one dimension
0,0, // dst x,y
0,0, // src LR,UD
$neww, $newh,
$origw, $origh);
if ($crop == '1')
{
$resized_cropped_id = ImageCreate($endw , $endh); // create an image to crop the oversized dimension
// 2. Set transparent colour for cropped image
imagepalettecopy($resized_cropped_id, $img);
imagefill($resized_cropped_id,0,0,$colorTransparent);
imagecolortransparent($resized_cropped_id,$colorTransparent);
ImageCopyResampled($resized_cropped_id, $resized_id, // crop image - so right size
0,0, // dst x,y
$offsetw,$offseth, // src LR,UD
$endw, $endh,
$endw, $endh);
$return_val = ($full = ImagePNG($resized_cropped_id, $newfile, $imagequal) // save jpeg to destination
&& $return_val == 1) ? "1" : "0";
ImageDestroy($resized_cropped_id);
}
else
{
$return_val = ($full = ImagePNG($resized_id, $newfile, $imagequal) // save jpeg to destination
&& $return_val == 1) ? "1" : "0";
}
ImageDestroy($resized_id); // wipe memory for temp images
ImageDestroy($img);
return ($return_val) ? TRUE : FALSE ;
}
謝謝你們,現在我已經用get_png_imageinfo & imagecreatetruecolor定了!