(PHP 4, PHP 5, PHP 7, PHP 8)
imagecreatefrompng — Crear una nueva imagen a partir de un fichero o una URL
imagecreatefrompng() devuelve un identificador de imagen
que representa una imagen obtenida a partir del fichero
filename.
Puede utilizar una URL como nombre de archivo con esta función, si el gestor fopen ha sido activado. Véase fopen() para más detalles sobre cómo especificar el nombre del archivo. Consulte Protocolos y Envolturas soportados para más información sobre las capacidades de los diferentes gestores, las notas sobre su uso, así como la información sobre las variables predefinidas que proporcionan.
filenameRuta de acceso a la imagen PNG.
Devuelve un objeto de imagen en caso de éxito, false en caso de error.
| Versión | Descripción |
|---|---|
| 8.0.0 | En caso de éxito, esta función devuelve ahora una instancia de GDImage ; anteriormente, se devolvía un resource . |
Ejemplo #1 Ejemplo de gestión de un error al cargar una imagen PNG
<?php
function LoadPNG($imgname)
{
/* Intento de abrir la imagen */
$im = @imagecreatefrompng($imgname);
/* Procesamiento en caso de fallo */
if(!$im)
{
/* Creación de una imagen vacía */
$im = imagecreatetruecolor(150, 30);
$bgc = imagecolorallocate($im, 255, 255, 255);
$tc = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 150, 30, $bgc);
/* Se muestra un mensaje de error */
imagestring($im, 1, 5, 5, 'Error de carga ' . $imgname, $tc);
}
return $im;
}
header('Content-Type: image/png');
$img = LoadPNG('bogus.image');
imagepng($img);
?>Resultado del ejemplo anterior es similar a:
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);
?>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.