Mam funkcje która tworzy miniaturki z JPG, GIF i PNG. Wszystkie formaty działają poprawnie, niestety przy tworzeniu PNG tworzy nieprawidłowy plik, który się nie wyświetla ani na stronie ani lokalnie.
Linijka 34.
function miniaturka($folder, $plik,$max_x,$max_y, $kompresja){
/*
* source - obrazek jpeg
* max_x - maksymalna szerokosc pomniejszonego obrazka
* max_y - maksymalna dlugosc pomniejszonego obrazka
*/
$source=$folder.$plik;
if(exif_imagetype($source) == IMAGETYPE_JPEG){
$img_src = imagecreatefromjpeg($source);
}elseif(exif_imagetype($source) == IMAGETYPE_GIF){
$img_src = imagecreatefromgif($source);
}elseif(exif_imagetype($source) == IMAGETYPE_PNG){
$img_src = imagecreatefrompng($source);
}else{
die('Zly typ pliku. Akceptowane formaty to: JPG/JPEG, GIF, PNG<br> <a href="upload_zdjecia.php">zmien</a>');
}
$image_x = imagesx($img_src);
$image_y = imagesy($img_src);
if($image_x > $image_y){ //landscape
$ratio = ($image_x > $max_x) ? $max_x/$image_x : 1;
}else{ //portrait
$ratio = ($image_y > $max_y) ? $max_y/$image_y : 1;
}
$new_x = $image_x*$ratio;
$new_y = $image_y*$ratio;
$new_img = imagecreatetruecolor($new_x, $new_y);
imagecopyresampled($new_img, $img_src, 0, 0, 0, 0, $new_x, $new_y, $image_x, $image_y);
if(exif_imagetype($source) == IMAGETYPE_JPEG){
imagejpeg($new_img, $folder.'t_'.$plik,$kompresja);
}elseif(exif_imagetype($source) == IMAGETYPE_GIF){
imagegif($new_img, $folder.'t_'.$plik,$kompresja);
}elseif(exif_imagetype($source) == IMAGETYPE_PNG){
imagepng($new_img, $folder.'t_'.$plik,$kompresja);
}
ImageDestroy($img_src);
ImageDestroy($new_img);
}