If you're trying to load a translucent png-24 image but are finding an absence of transparency (like it's black), you need to enable alpha channel AND save the setting. I'm new to GD and it took me almost two hours to figure this out.
<?php
$imgPng = imageCreateFromPng($strImagePath);
imageAlphaBlending($imgPng, true);
imageSaveAlpha($imgPng, true);
/* Output image to browser */
header("Content-type: image/png");
imagePng($imgPng);
?>imagecreatefrompng
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
imagecreatefrompng
Референца за `function.imagecreatefrompng.php` со подобрена типографија и навигација.
imagecreatefrompng
(PHP 4, PHP 5, PHP 7, PHP 8)
imagecreatefrompng — Креирај нова слика од датотека или URL
= NULL
imagecreatefrompng() враќа идентификатор на слика што ја претставува сликата добиена од даденото име на датотека.
URL може да се користи како име на датотека со оваа функција ако fopen обвивки се овозможени. Погледнете fopen() за повеќе детали за тоа како да го специфицирате името на датотеката. Погледнете го Поддржани протоколи и обвивки за линкови до информации за тоа какви способности имаат разните обвивки, белешки за нивната употреба и информации за сите предодредени променливи што може да ги обезбедат.
Параметри
filename-
Патека до PNG сликата.
Вратени вредности
Враќа објект од слика при успех, false при грешки.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.0.0 | При успех, оваа функција враќа GDImage инстанца сега; претходно, а resource . |
Примери
Пример #1 Пример за справување со грешка при вчитување на PNG
<?php
function LoadPNG($imgname)
{
/* Attempt to open */
$im = @imagecreatefrompng($imgname);
/* See if it failed */
if(!$im)
{
/* Create a blank image */
$im = imagecreatetruecolor(150, 30);
$bgc = imagecolorallocate($im, 255, 255, 255);
$tc = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 150, 30, $bgc);
/* Output an error message */
imagestring($im, 1, 5, 5, 'Error loading ' . $imgname, $tc);
}
return $im;
}
header('Content-Type: image/png');
$img = LoadPNG('bogus.image');
imagepng($img);
?>Горниот пример ќе прикаже нешто слично на:
Белешки од корисници 4 белешки
Because gd and imagick do not support animated PNG (at this moment), i wrote a simple function to determine if given PNG is APNG or not. It does not validate PNG, only checks whenever "acTL" chunk appears before "IDAT" like the specification says: https://wiki.mozilla.org/APNG_Specification
<?php
function is_apng(string $filename): bool
{
$f = new \SplFileObject($filename, 'rb');
$header = $f->fread(8);
if ($header !== "\x89PNG\r\n\x1A\n") {
return false;
}
while (!$f->eof()) {
$bytes = $f->fread(4);
if (strlen($bytes) < 4) {
return false;
}
$length = unpack('N', $bytes)[1];
$chunkname = $f->fread(4);
switch ($chunkname) {
case 'acTL':
return true;
case 'IDAT':
return false;
}
$f->fseek($length + 4, SEEK_CUR);
}
return false;
}
?>I had the same problem as jboyd1189 at yahoo dot com but I solve d it allocating more memory dynamically.
Usually the memory_limit var on php.ini is set to 8M. Unfortunately, the required amount of memory to manage a PNG image about 1000x1000 could be bigger !
The approach I used to solve the problem is:
1-Calculate the memory required by the image
2-Set the new memory_limit value
3-Create the PNG image and thumbnail
4-Restore the original value
1-The following value works for me:
$required_memory = Round($width * $height * $size['bits']);
Note that for JPEG the requirements are not the same:
http://es2.php.net/manual/en/function.imagecreatefromjpeg.php#60241
2-Use somthing like:
$new_limit=memory_get_usage() + $required_memory;
ini_set("memory_limit", $new_limit);
4-ini_restore ("memory_limit");When using imagecreatepng with alpha blending you will lose the blending.
To over come this use something like the following
<?php
$dstimage=imagecreatetruecolor($width,$height);
$srcimage=imagecreatefrompng($src);
imagecopyresampled($dstimage,$srcimage,0,0,0,0, $width,$height,$width,$height);
?>
Where $width and $height are the width and height of the $src image.
This will create a true colour image then copy the png image to this true colour image and retain alpha blending.