2010-07-12 1 views
0

Я использовал следующую функцию php для создания миниатюр.Проблема создания миниатюры изображения png!

function createThumbs($pathToImages, $pathToThumbs, $thumbWidth) 
{ 
    $dir = opendir($pathToImages); 

    while (false !== ($fname = readdir($dir))) { 
    $info = pathinfo($pathToImages . $fname); 
    if (strtolower($info['extension']) == 'jpg' || strtolower($info['extension']) == 'png') 
    { 
     // load image and get image size 
     if(strtolower($info['extension']) == 'jpg') 
     $img = imagecreatefromjpeg("{$pathToImages}{$fname}"); 
     else 
     $img = imagecreatefrompng("{$pathToImages}{$fname}"); 
     $width = imagesx($img); 
     $height = imagesy($img); 

     // calculate thumbnail size 
     $new_width = $thumbWidth; 
     $new_height = floor($height * ($thumbWidth/$width)); 

     // create a new tempopary image 
     $tmp_img = imagecreatetruecolor($new_width, $new_height); 

     // copy and resize old image into new image 
     //imagecopyresized($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 
     imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 

     // save thumbnail into a file 
     if(strtolower($info['extension']) == 'jpg') 
     imagejpeg($tmp_img, "{$pathToThumbs}{$fname}"); 
     else 
     imagepng($tmp_img, "{$pathToThumbs}{$fname}"); 
    } 
    } 
    // close the directory 
    closedir($dir); 
} 

Правильное эскиз создан для изображения в формате jpg. Но для прозрачного изображения png миниатюра создается с черным фоном. Как сделать функцию работы для png-изображения? Пожалуйста, предложите мне. Заранее спасибо.

ответ

0

Я не помню точные сведения, но вы хотите, чтобы читать дальше, и экспериментировать с imagesavealpha() и imageaplphablending()

Если память мне не изменяет, вы хотите установить imagealphablending выключен, а затем set imagesavealpha true. (На самом деле, да, страница руководства для imagesavealpha() следует только, что)

Так, в конце кода:

// save thumbnail into a file 
if(strtolower($info['extension']) == 'jpg'){ 
    imagejpeg($tmp_img, "{$pathToThumbs}{$fname}"); 
}else{ 
    imagealphablending($tmp_img,false); 
    imagesavealpha($tmp_img,true); 
    imagepng($tmp_img, "{$pathToThumbs}{$fname}"); 
} 
0

Вы пытаетесь изобрести велосипед? Использовать php Thumbnailer :)

<?php 
// load the library 
require 'Thumbnailer'; 

// make callback function 
function myfunc(& $thumb) { 
    // that will make a image thumbnail square 100x100px 
    $thumb->thumbSquare(100)->save('photos/output/'.$thumb->filename); 
} 

// call batch helper 
// find all jpg, png and gif images in /photos/directory 
Thumbnailer::batch('myfunc', '/photos/directory/*.{jpg,png,gif}'); 
?> 

Это очень просто.