|
|
|
| Добрый вечер,
Нужна была функция, которая должна создавать миниатюры изображения нужного размера. Поискал в интернете решения, нашел парочку вариантов воплощения, собрал все в кучу и вот что получилось. (Все четко и хорошо работает, но только фон на слишком не пропорциональных размерах миниатюр получается черный. Подскажите, как переделать на белый фон или какой либо другой?)
function imageThumb($source, $nw, $nh)
{
$source = $source; // Исходное изображение
$nw = $nw; // Ширина миниатюры
$nh = $nh; // Высота миниатюры
//Отделяем и получаем имя файла с разширением
$sd = explode("/", $source);
$fil = $sd[count($sd)-1];
$sd = explode(".", $fil);
$names = md5($sd[count($sd)-2]); // Получаем только имя файла (без разширения) в md5
$stype = strtolower($sd[count($sd)-1]); // Получаем расширение файла в нижнем регистре
$dest = "thmb_cache/".$names."_w".$nw."_h".$nh.".jpg"; // Имя файла с результатом работы
switch($stype) {
case 'gif':
$simg = imagecreatefromgif($source);
break;
case 'jpg':
$simg = imagecreatefromjpeg($source);
break;
case 'jpeg':
$simg = imagecreatefromjpeg($source);
break;
case 'png':
$simg = imagecreatefrompng($source);
break;
}
//получаем размер оригинального изображения
$size = getimagesize($source);
$w = $size[0]; // Ширина
$h = $size[1]; // Высота
if($nw>$w or $nh>$h){
$nw=$w;
$nh=$h;
}
$dimg = imagecreatetruecolor($nw, $nh);
$wm = $w/$nw;
$hm = $h/$nh;
$h_height = $nh/2;
$w_height = $nw/2;
if($w > $h) {
$adjusted_width = $w / $hm;
$half_width = $adjusted_width / 2;
$int_width = $half_width - $w_height;
imagecopyresampled($dimg,$simg,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h);
} else if(($w < $h) || ($w == $h)) {
$adjusted_height = $h / $wm;
$half_height = $adjusted_height / 2;
$int_height = $half_height - $h_height;
imagecopyresampled($dimg,$simg,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h);
} else {
imagecopyresampled($dimg,$simg,0,0,0,0,$nw,$nh,$w,$h);
}
imagejpeg($dimg,$dest,100);
return $dest;
}
|
| |
|
|
|
|
|
|
|
для: nikolai
(01.08.2011 в 22:23)
| | sorry уже сам разобрался.. нужно добавить после строки
$dimg = imagecreatetruecolor($nw, $nh);
|
строки
$col = imagecolorallocate($dimg, 219, 219, 219); // (фон серый)
imagefilledrectangle($dimg,0,0,$nw+10,$nh+10,$col);
|
Вот только кто теперь подскажет, как написать функцию, которая будет переводить из обычного 16-ричного HTML #FFFFFF в RGB (255,255,255) чтоб можно было в функцию которая выше, передавать также цвет в HTML для фона миниатюры! | |
|
|
|
|
|
|
|
для: nikolai
(01.08.2011 в 22:33)
| | >Вот только кто теперь подскажет, как написать функцию, которая будет переводить из обычного 16-ричного HTML #FFFFFF в RGB (255,255,255) чтоб можно было в функцию которая выше, передавать также цвет в HTML для фона миниатюры!
substr(), hex2dec(). | |
|
|
|
|