Почему размер становится больше при использовании imagecreatefromjpeg / png / gif / bmp по мере необходимости для добавления водяного знака

Моя тема о добавлении водяных знаков к изображениям с использованием кода PHP. Пример здесь http://php.net/manual/en/image.examples-watermark.php

Я сталкиваюсь с проблемой в том, что упомянутый пример имеет дело только с изображениями JPEG, поскольку он использует функцию imagecreatefromjpeg ().

Я использовал эту функцию, я не помню, откуда я ее взял. Создает изображения других типов png, bmp и gif.

function imageCreateFromAny($filepath){
$type = exif_imagetype($filepath); // [] if you don't have exif you could use getImageSize()
$allowedTypes = array(
1,  // [] gif
2,  // [] jpg
3,  // [] png
6   // [] bmp
);
if (!in_array($type, $allowedTypes)) {
return false;
}
switch ($type) {
case 1 :

$im = imageCreateFromGif($filepath);
break;
case 2 :

$im = imageCreateFromJpeg($filepath);
break;
case 3 :

$im = imageCreateFromPng($filepath);
break;
case 6 :

$im = imageCreateFromBmp($filepath);
break;
}
return $im;
}

ПРОБЛЕМА: Выходное изображение функции — это изображение, размер которого умножается на 4, я имею в виду, что размер увеличивается примерно в 4 раза. Например, если функция получила изображение размером 94K, она выводит его около 380К.

Я хочу решить проблему максимизации числа размеров, я хочу получить тот же размер изображения, который был до ввода размера изображения в функцию imageCreateFromAny ($ filepath)

Подсказка:
Функция ниже вызывает функцию выше

function Stamp($filename){// Load the stamp and the photo to apply the watermark to
$stamp = imagecreatefrompng('../../style/images/stamp1.png');
//        $im = imagecreatefromjpeg('../../gallery/black-white/'.$filename);
$im = imageCreateFromAny('../../gallery/black-white/'.$filename);// Set the margins for the stamp and get the height/width of the stamp image
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

// Copy the stamp image onto our photo using the margin offsets and the photo
// width to calculate positioning of the stamp.
imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));

// Output and free memory
//        header('Content-type: image/png');
//        imagepng($im);
$filename_new = '../../gallery/black-white/'.$filename.'';
//        if (move_uploaded_file(imagepng($im), '../../gallery/black-white/2'   ))
imagepng($im, $filename_new);
imagedestroy($im);}

0

Решение

Вы сохраняете изображение в формате PNG, который, да, часто значительно больше, чем JPEG, но при этом имеет более высокое качество. JPEG является с потерями формат, который отбрасывает качество для меньшего размера файла. PNG является без потерь формат, который сохраняет всю возможную информацию и просто пытается сжать данные настолько, насколько это возможно. Для изображения с большим количеством деталей это приведет к значительно большим размерам, чем JPEG с настройкой низкого качества.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]