Создайте прозрачный файл png с помощью PHP

В настоящее время я хотел бы создать прозрачный png с самым низким качеством.

Код:

<?php
function createImg ($src, $dst, $width, $height, $quality) {
    $newImage = imagecreatetruecolor($width,$height);
    $source = imagecreatefrompng($src); //imagecreatefrompng() returns an image identifier representing the image obtained from the given filename.
    imagecopyresampled($newImage,$source,0,0,0,0,$width,$height,$width,$height);
    imagepng($newImage,$dst,$quality);      //imagepng() creates a PNG file from the given image. 
    return $dst;
}

createImg ('test.png','test.png','1920','1080','1');
?>

Однако есть некоторые проблемы:

  1. Нужно ли указывать файл png перед созданием любого нового файла? Или я могу создать без существующего файла png?

    Предупреждение: imagecreatefrompng(test.png): не удалось открыть поток: нет такого файла или каталога в

    C:\DSPadmin\DEV\ajax_optipng1.5\create.php в строке 4

  2. Несмотря на то, что есть сообщение об ошибке, он по-прежнему создает файл png, однако я обнаружил, что файл представляет собой изображение черного цвета, нужно ли мне указать какой-либо параметр, чтобы сделать его прозрачным?

Спасибо.


person user782104    schedule 24.06.2013    source источник


Ответы (3)


1) imagecreatefrompng('test.png') пытается открыть файл test.png, который затем можно редактировать с помощью функций GD.

К 2) Для включения сохранения альфа-канала используется imagesavealpha($img, true);. Следующий код создает прозрачное изображение размером 200x200 пикселей, включив сохранение альфа-канала и заполнив его прозрачностью.

<?php
$img = imagecreatetruecolor(200, 200);
imagesavealpha($img, true);
$color = imagecolorallocatealpha($img, 0, 0, 0, 127);
imagefill($img, 0, 0, $color);
imagepng($img, 'test.png');
person max-m    schedule 24.06.2013
comment
Спасибо за помощь! Не могли бы вы научить меня, как минимизировать размер файла png? Установка уровня качества «9» в функции imagepng — единственное, что я могу сделать? Благодарность - person user782104; 24.06.2013
comment
Параметр качества по умолчанию imagepngs (который следует называть сжатием, поскольку pngs сжатие без потерь) равен 9 (на самом деле, я тестировал без установленного качества (234 Bytes), качества 0 (несколько сотен KB) и настройки 9 (234 байта) ). Так что я думаю, что это лучшее, что мог сделать GD. - person max-m; 24.06.2013
comment
это заставляет мои черные линии исчезнуть - person Mladen Janjetovic; 28.10.2016

Взгляни на:

Пример функции копирует прозрачные файлы PNG:

    <?php
    function copyTransparent($src, $output)
    {
        $dimensions = getimagesize($src);
        $x = $dimensions[0];
        $y = $dimensions[1];
        $im = imagecreatetruecolor($x,$y); 
        $src_ = imagecreatefrompng($src); 
        // Prepare alpha channel for transparent background
        $alpha_channel = imagecolorallocatealpha($im, 0, 0, 0, 127); 
        imagecolortransparent($im, $alpha_channel); 
        // Fill image
        imagefill($im, 0, 0, $alpha_channel); 
        // Copy from other
        imagecopy($im,$src_, 0, 0, 0, 0, $x, $y); 
        // Save transparency
        imagesavealpha($im,true); 
        // Save PNG
        imagepng($im,$output,9); 
        imagedestroy($im); 
    }
    $png = 'test.png';

    copyTransparent($png,"png.png");
    ?>
person neuraminidase7    schedule 24.06.2013

1) Вы можете создать новый png-файл без существующего. 2) Вы получаете изображение черного цвета, потому что используете imagecreatetruecolor();. Он создает изображение высочайшего качества с черным фоном. Поскольку вам нужно изображение самого низкого качества, используйте imagecreate();

<?php
$tt_image = imagecreate( 100, 50 ); /* width, height */
$background = imagecolorallocatealpha( $tt_image, 0, 0, 255, 127 ); /* In RGB colors- (Red, Green, Blue, Transparency ) */
header( "Content-type: image/png" );
imagepng( $tt_image );
imagecolordeallocate( $background );
imagedestroy( $tt_image );
?>

Вы можете прочитать больше в этой статье: Как создать изображение с помощью PHP

person user3051471    schedule 30.11.2013