Кэш изображений, помогите

1.08K
.
Ей 25

erricss, на всякий случай кину свой вариант. Смотри, вот сама функция:

Нажми на меня (+/-)
function resize_image($image, $size = 150) {
define('DS', DIRECTORY_SEPARATOR);

// папка для сохранения превьюшек
$dir = 'tmp';

// имя превьюшки
$name = pathinfo($image);
$name = basename($image, '.'.$name['extension']);
 
if(!is_dir($dir)) {
mkdir($dir, 0777, 1);
}
 
if ($image) {
$info = @getimagesize($image);

if ($info) {
if ($info[2] > 3) {
echo '<div>Не верный тип файла!</div>';
} else {                      
switch ($info[2]) {
case 1:
$function = 'imagecreatefromgif';
break;

case 2:
$function = 'imagecreatefromjpeg';
break;

case 3:
$function = 'imagecreatefrompng';
break;
}

$image = $function($image);
}

$x = imagesx($image);
$y = imagesy($image);
 
} else {
echo '<div>Файл не найден!</div>';
}
 
$filename = $dir . DS . $name . '.jpg';
 
// пропорционально уменьшить по ширине до 240
if ($y > $size) {
$newx = $size;
$newy = $y * ($size / $x);
} else {
$newx= $x;
$newy = $y;
}
 
$newimg = imagecreatetruecolor($newx, $newy);
 
if ($info[2]==3) {
// прозрачность для png
imagefill($newimg, 0, 0, imagecolorallocate($newimg, 255, 255, 255));
} elseif ($info[2]==1) {
// прозрачность для gif    
imagecolortransparent($image, imagecolorallocate($image, 255, 255, 255));    
}
 
imagecopyresampled($newimg, $image, 0, 0, 0, 0, $newx, $newy, $x, $y);  

@imagejpeg($newimg, $filename, 100);
 
} else {
return false;
}
}


А вот так её надо использовать:
if (!file_exists(ROOTPATH . 'tmp/27_2.jpg'))
resize_image(ROOTPATH . 'files/board/27_2.jpg');

echo '<img src="/tmp/27_2.jpg" />';


Вот это: tmp/27_2.jpg - твоя превьюшка. Мы проверяем её наличие, если её нет то делаем, а затем выводим. Вот это: files/board/27_2.jpg - оригинальная картинка. Плюс в самой функции вот это:
$dir = 'tmp';
Замени на свою папку с превьюшками.
.

ValekS, Спасибо. Сейчас потестирую

.
(\/)____o_O____(\/)

ValekS, код старый, но рабочий, уже и не помню для чего или кого писал, сейчас вы я по другому сделал, так как нашёл интересные подходы, но давно понял что сама гд кривая до не могу, и много нюансов есть, при том же наложении картинок или прозрачности

.
ramzes

ValekS, настроящая прозрачность не так делается.
это у тебя старинный вариант, он косячит с обводкой и полу-прозрачными пикселями

$image= ImageCreateFromPng('image.png');
imageSaveAlpha($image, true);

Koenig, да не, не кривая она, сейчас уже все есть для работы с альфа-каналом
.
(\/)____o_O____(\/)

ramzes, у меня целый парк велосипедов по этому поводу, все странности появляются в следствии конвертации типов изображений, для пнг это один способ, для прочих другие

.
Ей 25
# ramzes (15.07.2016 / 19:51)
ValekS, настроящая прозрачность не так делается.
это у тебя старинный вариант, он косячит с обводкой и полу-прозрачными пикселями

$image= ImageCreateFromPng('image.png');
imageSaveAlpha($image
Это не у меня, а у Димона.

ImageMagick лучше ГД?
.
(\/)____o_O____(\/)

ValekS, конечно лучше, даже гифки не портит

.
ramzes
ImageMagick

вот чего не знаю, того не знаю. гифки он делает а ГД ннет. это все мои познания о нем)
if($imgsize['mime']=='image/png'){
                    $src = ImageCreateFromPng($image);
                    $dst=ImageCreateTrueColor($tn_width, $tn_height);

                    $black = imagecolorallocate($dst, 0, 0, 0);
                    imagecolortransparent($dst, $black);
                    imagealphablending($dst, false);
                    imageSaveAlpha($dst, true);
                    imagecopyresampled($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height, $width, $height);
                    if(isset($this->query[1]) AND $this->query[1]='preview') {
                       $copy = ImageCreateFromPng('image/copy.png');
                        imagealphablending($dst, true);
                        imagecopyresampled($dst, $copy, $tn_width - 125, $tn_height - 35, 0, 0, 125, 35, 125, 35);
                        ImageDestroy($copy);
                    }

                    header("Content-type: image/png");
                    ImagePng($dst, null);
                    ImageDestroy($src);
                    ImageDestroy($dst);
                }

результат: http://smartoff.net/forum/imag ... view/
.
(\/)____o_O____(\/)

ramzes, то есть у тебя изначально извесно что приходит пнг, у меня по другому
http://johncms.com/forum/index ... 42230 имага из строки

.
# Koenig (16.07.2016 / 00:16)
ramzes, то есть у тебя изначально извесно что приходит пнг, у меня по другому
http://johncms.com/forum/index ... 98994 имага из строки
нет. это просто кусок для пнг. ты же не будешь сохранять несуществующую прозрачность жипега?
Всего: 32