■ やろうとしていること
PHPで画像パスを引数として自動的に画像にウォーターマーク(すかし)を追加するショートコードを組もうと考えています。画像にすかしを入れる方法は次を採用しようと考えています:
PHP
1<?php 2// スタンプと、それをすかしとして適用する写真を読み込みます 3$stamp = imagecreatefrompng('stamp.png'); 4$im = imagecreatefromjpeg('photo.jpeg'); 5 6// スタンプの余白を設定し、スタンプ画像の幅と高さを取得します 7$marge_right = 10; 8$marge_bottom = 10; 9$sx = imagesx($stamp); 10$sy = imagesy($stamp); 11 12// スタンプ画像を写真の上にコピーします。余白の値と 13// 写真の幅を元にスタンプの位置を決定します 14imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp)); 15 16// 出力し、メモリを開放します 17header('Content-type: image/png'); 18imagepng($im); 19imagedestroy($im); 20?>
(参考:https://www.php.net/manual/ja/image.examples-watermark.php )
■ 困っていること・試してみたこと
試しに上記コードをそのまま実行したところ、真っ黒な背景に小さな白い四角が表示されるだけで何も起きませんでした。 画像パス、ファイル名、拡張子等々をよく確認して実行してみたのですがミスは特にありませんでした。
原因を突き止めるためにとりあえず画像を作成→出力するだけのコードを組みました:
PHP
1$img = imagecreatefrompng('画像パス'); 2header('Content-type: image/png'); 3imagepng($img); 4imagedestroy($img);
色々いじってみたところ、どうも header関数の部分が原因のようです。
header関数の部分を省いて再度サイトに表示させると、文字化けした文字列が表示されるのでリクエストしたデータは返ってきているようです。
解決策を探してみたところ同じような問題で困っている方が過去にいらっしゃったようです:
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11170505951
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11192174686
その他、組んだPHPをbase64でエンコードimgタグで表示させるなどのやり方を目にしましたがチンプンカンプンで途方に暮れています・・・。
なにか解決法をご存知でしたらぜひお知恵をお貸しください!
まとまりのない質問ですみません m(_ _)m
■ 備考
動作環境:Mac
Wordpressのテーマ: Luxeritas
サーバ: 開発環境(LOCAL by FLYWHEEL)
ブラウザ: Chrome(Incognito モード)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/02/03 23:30
2022/02/04 05:36