2013-06-24 33 views
6

現在、私は最低品質の透明な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ファイルが生成されますが、ファイルが黒色の画像であることが判明しました。透明にするためには、パラメータを指定する必要がありますか?

ありがとう。

答えて

25

へ1) imagecreatefrompng('test.png')は、ファイルtest.pngを開こうとします。このファイルはGD関数で編集できます。

2) アルファチャンネルの保存を有効にするにはimagesavealpha($img, true);が使用されます。 次のコードは、アルファ保存を有効にして透過で塗りつぶすことで、200x200pxサイズの透明イメージを作成します。透明PNGファイル

例機能コピー:

<?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

ありがとうございました! PNGファイルのサイズを最小限に抑える方法を教えていただけますか?imagepng機能の '9'の設定は私ができる唯一のものですか?ありがとうございます – user782104

+1

'imagepng'のデフォルトの" quality "設定(' png'圧縮はロスレスですので、compressionsという名前にする必要があります)は9です(afaik、設定済みの品質(234 'Bytes')、品質0 100KB)と9(234Bytes)の設定)を有する。だから私はこれがGDができる最高のものだと思う。 –

+0

これは私の黒い線が消えるようにする –

5

ことを見てみましょう

<?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)既存のものを使わずに新しい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); 
?> 

最低品質の画像の使用を必要として: - ほとんどのLinuxリポジトリ内や自作で利用できるHow to Create an Image Using PHP

1

あなたはImageMagickのの一部であり、コンソールユーティリティconvertを使用することができますOSX用:この例では

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

black透明な色です。

関連する問題