Создайте прозрачный 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, однако, я обнаружил, что файл является черно-цветным изображением, мне нужно указать какой-либо параметр, чтобы сделать его прозрачным?

Благодарю.

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

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

 <?php $img = imagecreatetruecolor(200, 200); imagesavealpha($img, true); $color = imagecolorallocatealpha($img, 0, 0, 0, 127); imagefill($img, 0, 0, $color); imagepng($img, 'test.png'); 

Взгляни на:

  • imagecolorallocatealpha
  • imagefill

Примерная функция копирует прозрачные файлы 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"); ?> 

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

Вы можете использовать консольную утилиту, которая является частью ImageMagick, доступной в большинстве репозиториев Linux и в доморощенных для OSX:

  exec('convert image.png -transparent black image_transparent.png') 

В этом примере black – это прозрачный цвет.