質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1760閲覧

PHP GDlib PNGの透明度をそのまま保存したい

teru2

総合スコア14

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2014/08/23 04:05

下記のPHPコードは、ブラウザにアップロードされたPNGを128x128にリサイズするためにGDを使用しています。

このコードで、オリジナルイメージの透明な部分が黒く表示されてしまいます。
imagesavealphaをセットしても、やはり何かがおかしいのです。

イメージをサンプリングし直すとき、透明度を保つ良い方法はあるでしょうか?
`
$temp_file = $_FILES['myField'][ 'tmp_name' ];
list( $width, $height, $type )
= getimagesize( $temp_file );

$srcImage = imagecreatefrompng( $temp_file );

$targetImage = imagecreatetruecolor( 128, 128 );

imagesavealpha( $targetImage, true );

imagecopyresampled( $targetImage, $srcImage,
0, 0,
0, 0,
128, 128,
$width, $height );

imagepng( $targetImage, 'result.png', 9 );
`

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

imagealphablending( $targetImage, false ); imagesavealpha( $targetImage, true );
このtargetImageには、ソースイメージではなくalpha settingが必要です。そこに注意しましょう。

追記: コードを置き換えました。また、下記の回答やコメントを参照してください。完璧な方法ではないかもしれませんが、とりあえず問題を解決することはできました。
`
$temp_file = $_FILES['myField'][ 'tmp_name' ];
list( $width, $height, $type )
= getimagesize( $temp_file );

$srcImage = imagecreatefrompng( $temp_file );

$targetImage = imagecreatetruecolor( 128, 128 );
imagealphablending( $targetImage, false );
imagesavealpha( $targetImage, true );

imagecopyresampled( $targetImage, $srcImage,
0, 0,
0, 0,
128, 128,
$width, $height );

imagepng( $targetImage, 'result.png', 9 );
`

投稿2014/08/24 02:30

mickey_m

総合スコア188

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問