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

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

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

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

Q&A

解決済

2回答

2761閲覧

php GD を利用してpngの合成につきまして

nerd

総合スコア37

PHP

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

0グッド

0クリップ

投稿2016/06/10 06:14

現在、phpとGDを使用して画像合成機能を作成テストを行っております。
その中で、透過部分で、うまく動いていなくご相談させていただきます。

全体の流れとして、CSVで金額を取得後数字一文字ずつ画像に変更し、1000の場合は1,000とコンマを入れようとしております。

$mi = 0; while ($mi <= (count($arr)-1)) { $name = $arr[$mi]['0']; $price = $arr[$mi]['1']; $m_price = $arr[$mi]['2']; $text = $arr[$mi]['3']; $free = $arr[$mi]['4']; //number array 初期化 $number = array(); //金額切り分け$number に一文字ずつ配列格納処理 for($i = 0; $i <= mb_strlen($price)-1 ; $i++) { $number[] = $price[$i]; } //金額画像最大横幅取得 $yen = imagecreatefrompng('common/'.'f_en.png'); $number_width = imagesx($yen); $number_height = 0; for ($i=0; $i < count($number); $i++) { $number_image = imagecreatefrompng('common/'.'n_'.$number[$i].'.png'); $width = imagesx( $number_image ); $height = imagesy( $number_image ); $number_width = $number_width + $width; if($height > $number_height){ $number_height = $height; } } $im = imagecreatetruecolor ($number_width,$number_height); imagealphablending($im, false); $wposition = 0; $hposition = 0; imagecopy($im,$yen,$wposition,$hposition,0,0,imagesx($yen),imagesy($yen)); $wposition = imagesx($yen); $count = count($number); for ($i=0; $i < $count; $i++) { $number_image = imagecreatefrompng('common/'.'n_'.$number[$i].'.png'); imagecopy($im,$number_image,$wposition,$hposition,0,0,imagesx($number_image),imagesy($number_image)); if($count > 3 and $i == 1 or $i ==4){ $comma_image = imagecreatefrompng('common/comma.png'); imagecopy($im,$comma_image,$wposition - imagesx($comma_image)/2,$hposition,0,0,imagesx($comma_image),imagesy($comma_image)); } $wposition = $wposition + imagesx($number_image); } imagesavealpha($im, true); imagepng($im,'tmp/number/'.$name.'.png'); imagedestroy($im); $mi++; }

pngファイル生成時にimagealphablending imagesavealphaを使用して生成すると透過部分を重ねれると記事が書いてありましたので、試したのですが数字の部分に関してはうまく透過画像を生成することはできましたが、コンマを重ねる部分でコンマ部分が透過しなくて困っております。

イメージ説明

コードの中身がテスト的に作っている部分も多くお見苦しいですが、何卒ご教授、ヒントをいただけましたら幸いです。

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

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

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

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

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

guest

回答2

0

自己解決

メモリー上で展開しているときに、透過情報のあるものを下の画像に重ねた場合
上の透過情報が下の画像よりも優先されて透過しているようでした。
この現象の回避方法がよくわかりませんでしたので
数字の画像変換をし、実体ファイル化してから、コンマの画像を重ねる形に変更いたしました。
これにより無事思った動作になりました

投稿2017/05/08 14:21

nerd

総合スコア37

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

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

0

頑張って合成するのも良しですが、透過pngにしたらコピーするだけじゃないですかね?

投稿2016/06/10 09:36

pochi0701

総合スコア210

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

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

nerd

2016/06/11 01:12

ご回答誠にありがとうございます。 すみません。少し理解できておりません。 ``imagecopy``ではなくて``copy``を使ったほうがいいということですか?
nerd

2016/06/15 06:39

ご連絡遅くなりました。 参考サイトありがとうございました。 その後色々テストして判明したこと?がございましたのでご報告として挙げさせていただきます。 メモリー上で展開しているときに、透過情報のあるものを下の画像に重ねた場合 上の透過情報が下の画像よりも優先されて透過しているようでした。 この現象の回避方法がよくわかりませんでしたので 数字の画像変換をし、実体ファイル化してから、コンマの画像を重ねる形に変更いたしました。 これにより無事思った動作になりました。 Photoshopのレイヤー構造で重ねるとは違う動作になるようでした。 お付き合いいただき誠にありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問