2013-06-24 23 views
6

Attualmente mi piacerebbe creare un png trasparente con la qualità più bassa.Creare un file png trasparente usando PHP

Il codice:

<?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'); 
?> 

Tuttavia, ci sono alcuni problemi:

  1. Devo specifica un file PNG prima di creare qualsiasi nuovo file? O posso creare senza alcun file png esistente?

    Attenzione: imagecreatefrompng (test.png): failed to open stream: No such file or directory in

    C: \ DSPadmin \ dev \ ajax_optipng1.5 \ create.php sulla linea 4

  2. Sebbene ci sia un messaggio di errore, genera comunque un file PNG, tuttavia, quello che ho scoperto è che il file è un'immagine di colore nero, è necessario specificare qualsiasi parametro per renderlo trasparente?

Grazie.

risposta

25

A 1) imagecreatefrompng('test.png') tenta di aprire il file test.png che può essere modificato con le funzioni GD.

A 2) Per abilitare il salvataggio del canale alfa viene utilizzato imagesavealpha($img, true);. Il seguente codice crea un'immagine trasparente di dimensioni 200x200px abilitando il salvataggio in alpha e riempiendolo di trasparenza.

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

Grazie del tuo aiuto! Ti dispiacerebbe insegnarmi come minimizzare la dimensione del file png?L'impostazione del livello di qualità '9' nella funzione imagepng è l'unica cosa che posso fare? grazie – user782104

+1

l'impostazione di "qualità" predefinita di imagepng (che dovrebbe essere denominata compressioni, poiché le compressioni di png sono senza perdita di dati) è 9 (afaik, ho provato senza qualità impostata (234 'byte '), qualità 0 (alcuni centinaia di 'KB') e un'impostazione di 9 (234 byte)). Quindi immagino che questo sia il miglior GD. –

+0

questo fa sparire le mie linee nere –

5

Date un'occhiata a:

Un esempio funzione copia file PNG trasparenti:

<?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"); 
    ?> 
2

1) È possibile creare un nuovo file png senza uno esistente. 2) Si ottiene un'immagine a colori nera perché si utilizza imagecreatetruecolor();. Crea un'immagine di massima qualità con uno sfondo nero. Come avete bisogno di un uso un'immagine più bassa qualità 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); 
?> 

Si può leggere di più in questo articolo: How to Create an Image Using PHP

1

È possibile utilizzare l'utilità della console convert che fa parte di ImageMagick - disponibili nella maggior parte dei pronti contro termine Linux e in homebrew per OSX:

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

In questo esempio black è il colore trasparente.

Problemi correlati