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

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

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

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

GD(Graphics Library)

GD(Graphics Library)は、線や多角形、円、テキストなどを書くことができるライブラリです。グラフなどを作成する際に利用されます。

Q&A

解決済

1回答

5419閲覧

PHPのGD関数を使用して画像を縮小&トリミングすると背景色が黒になってしまう

kutu

総合スコア257

PHP

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

GD(Graphics Library)

GD(Graphics Library)は、線や多角形、円、テキストなどを書くことができるライブラリです。グラフなどを作成する際に利用されます。

0グッド

0クリップ

投稿2017/01/06 14:01

画像をアップロードする際にPHPで
・縮小
・トリミング
の2段階で行うと透明部分が真っ黒になってしまいます。
下記がこのソースなのですが、どこが悪いか分かる方いらっしゃいますでしょうか?

$image_resource = imagecreatefrompng($outPathTrimming); $width_resource = ImageSx($image_resource); $height_resource = ImageSy($image_resource); $width_trimming = ImageSx($image_resource) * $scale/100; $height_trimming = ImageSy($image_resource) * $scale/100; $width_output = 200; $height_output = 200; $image_trimming = ImageCreateTrueColor($width_trimming,$height_trimming); $image_output = ImageCreateTrueColor($width_output,$height_output); //ブレンドモードを無効にする imagealphablending($image_trimming, false); imagealphablending($image_output, false); //完全なアルファチャネル情報を保存するフラグをonにする imagesavealpha($image_trimming, true); imagesavealpha($image_output, true); //縮小イメージ作成 ImageCopyResampled($image_trimming, $image_resource,0,0,0,0, $width_trimming,$height_trimming,$width_resource,$height_resource); //トリミングイメージ作成 ImageCopyResampled($image_output, $image_trimming,0,0,($width_trimming - $width_output)/2,($height_trimming - $height_output)/2, $width_output,$height_output,$width_output,$height_output); //出力 imagepng($image_output, $outPath);

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

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

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

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

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

guest

回答1

0

ベストアンサー

たぶんトリミングの方でできた余白が黒くなっているんだと思います。そもそも単に画像をコピーすればいいだけなので、ImageCopyを使ってやればうまくいきましたよ。あと、image_outputの余白部分は、透明で塗りつぶしておく必要があるかと

php

1<?php 2$image_resource = imagecreatefrompng($outPathTrimming); 3$width_resource = ImageSx($image_resource); 4$height_resource = ImageSy($image_resource); 5$width_trimming = ImageSx($image_resource) * $scale/100; 6$height_trimming = ImageSy($image_resource) * $scale/100; 7$width_output = 200; 8$height_output = 200; 9 10$image_trimming = ImageCreateTrueColor($width_trimming,$height_trimming); 11$image_output = ImageCreateTrueColor($width_output,$height_output); 12 13//ブレンドモードを無効にする 14imagealphablending($image_trimming, false); 15imagealphablending($image_output, false); 16 17$transparent = imagecolorallocatealpha($image_output, 0, 0, 0, 127); // 透明度を持つ色を作成 18imagefill($image_output, 0, 0, $transparent); // 塗りつぶす 19 20//完全なアルファチャネル情報を保存するフラグをonにする 21imagesavealpha($image_trimming, true); 22imagesavealpha($image_output, true); 23 24//縮小イメージ作成 25ImageCopyResampled($image_trimming, $image_resource,0,0,0,0, $width_trimming,$height_trimming,$width_resource,$height_resource); 26 27//トリミングイメージ作成 28ImageCopy($image_output, $image_trimming,($width_output - $width_trimming)/2,($height_output - $height_trimming)/2, 0,0, $width_trimming,$height_trimming); 29 30//出力 31imagepng($image_output, $outPath);

投稿2017/01/06 23:57

編集2017/01/07 00:00
popobot

総合スコア6586

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問