回答編集履歴

1

合成画像を動的にする方法を記載

2020/03/09 06:25

投稿

miyabi_pudding
miyabi_pudding

スコア9528

test CHANGED
@@ -15,3 +15,127 @@
15
15
  但し、動画などに関してはかなり話が変わってくる)
16
16
 
17
17
  現状のコードでなんの問題もなく、PNG画像として扱われています。
18
+
19
+
20
+
21
+ # 追記2に対して
22
+
23
+ `img`に対して当てているのは、WordPressの記事ページでしょうか?
24
+
25
+ それではダメです。
26
+
27
+ なぜなら、それは普通のPHPを返しているからです。
28
+
29
+ (おそらく)
30
+
31
+
32
+
33
+ なぜ、watermark.phpが、PNG画像として認識されるかというと、
34
+
35
+ ```php
36
+
37
+ header( 'Content-type: image/png' );
38
+
39
+ ```
40
+
41
+ を実行しているからです。
42
+
43
+ これにより、httpヘッダーにて、PNG画像として認識させています。
44
+
45
+
46
+
47
+ コメントに寄せていただいた、合成画像を動的に、ということを実現するなら、
48
+
49
+ 下記のようになりますかね・・・。
50
+
51
+
52
+
53
+ ```php
54
+
55
+ // watermark.php
56
+
57
+ <?php
58
+
59
+ $stamp = imagecreatefrompng( 'watermark.png' );
60
+
61
+ // 下記を、URLパラメータから画像パスを取得できるようにする
62
+
63
+ // $im = imagecreatefromjpeg( 'motogazou.jpg' );
64
+
65
+ $imagePath = isset($_GET["imagePath"]) ? $_GET["imagePath"] : 'motogazou.jpg';
66
+
67
+ $im = imagecreatefromjpeg( $imagePath );
68
+
69
+
70
+
71
+ // スタンプの余白を設定し、スタンプ画像の幅と高さを取得します
72
+
73
+ $marge_right = 10;
74
+
75
+ $marge_bottom = 10;
76
+
77
+ $sx = imagesx( $stamp );
78
+
79
+ $sy = imagesy( $stamp );
80
+
81
+
82
+
83
+ // スタンプ画像を写真の上にコピーします。余白の値と
84
+
85
+ // 写真の幅を元にスタンプの位置を決定します
86
+
87
+ imagecopy( $im, $stamp, imagesx( $im ) - $sx - $marge_right, imagesy( $im ) - $sy - $marge_bottom, 0, 0, imagesx( $stamp ), imagesy( $stamp ) );
88
+
89
+
90
+
91
+ // 出力し、メモリを開放します
92
+
93
+ header( 'Content-type: image/png' );
94
+
95
+ imagepng( $im );
96
+
97
+ imagedestroy( $im );
98
+
99
+ ?>
100
+
101
+ ```
102
+
103
+
104
+
105
+ んで、`img`のパスの書き方は下記です。
106
+
107
+
108
+
109
+ ```php
110
+
111
+ <html>
112
+
113
+ <head>
114
+
115
+ <meta name="viewport" content="width=device-width, minimum-scale=0.1">
116
+
117
+ <title>watermark.php (640×480)</title>
118
+
119
+ </head>
120
+
121
+ <body style="margin: 0px; background: #0e0e0e;">
122
+
123
+ <img style="-webkit-user-select: none;margin: auto;" src="https://【ドメイン】/test01/wp-content/themes/storefront-child/watermark.php?imagePath=【画像のURLかパス】" width="640" height="480">
124
+
125
+ </body>
126
+
127
+ </html>
128
+
129
+ ```
130
+
131
+ ようは、`watermark.php`に対して、合成したい画像のパスをURLパラメータを渡し、
132
+
133
+ `watermark.php`では、その画像パスを使って処理をするように変えたって感じです。
134
+
135
+
136
+
137
+ ただし、`imagecreatefromjpeg`メソッドが何をしているかは全くわからないので、このままで動くとは限りません。
138
+
139
+ なので、この先は、質問者さん自身でいろいろやっていただかないとわかりませんので、
140
+
141
+ これ以上の回答は、`imagecreatefromjpeg`が何を処理しているか、など、全ての情報を開示していただかないとできません。