/
imagecopyresampled.xml
300 lines (286 loc) · 9.18 KB
/
imagecopyresampled.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 593ea510e853ff034e03f78a4be0daa41661c9d4 Maintainer: hirokawa Status: ready -->
<!-- CREDITS: shimooka,mumumu -->
<refentry xml:id="function.imagecopyresampled" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>imagecopyresampled</refname>
<refpurpose>再サンプリングを行いイメージの一部をコピー、伸縮する</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>bool</type><methodname>imagecopyresampled</methodname>
<methodparam><type>GdImage</type><parameter>dst_image</parameter></methodparam>
<methodparam><type>GdImage</type><parameter>src_image</parameter></methodparam>
<methodparam><type>int</type><parameter>dst_x</parameter></methodparam>
<methodparam><type>int</type><parameter>dst_y</parameter></methodparam>
<methodparam><type>int</type><parameter>src_x</parameter></methodparam>
<methodparam><type>int</type><parameter>src_y</parameter></methodparam>
<methodparam><type>int</type><parameter>dst_width</parameter></methodparam>
<methodparam><type>int</type><parameter>dst_height</parameter></methodparam>
<methodparam><type>int</type><parameter>src_width</parameter></methodparam>
<methodparam><type>int</type><parameter>src_height</parameter></methodparam>
</methodsynopsis>
<para>
<function>imagecopyresampled</function> は、イメージの矩形の部分
を別のイメージにコピーします。同時にピクセル値を滑らかに補間を行い、
このため、特にサイズを小さくした場合には鮮明さが維持されます。
</para>
<para>
言い換えると、<function>imagecopyresampled</function> は
<parameter>src_image</parameter>
の座標 (<parameter>src_x</parameter>,<parameter>src_y</parameter>) にある
幅 <parameter>src_width</parameter>、高さ <parameter>src_height</parameter>
の矩形領域を受け取って、それを <parameter>dst_image</parameter>
の座標 (<parameter>dst_x</parameter>,<parameter>dst_y</parameter>)
にある幅 <parameter>dst_width</parameter>、
高さ <parameter>dst_height</parameter>
の矩形領域に配置します。
</para>
<para>
コピー元とコピー先の座標、幅、高さが異なる場合には、
適当なイメージ伸縮が行われます。座標は、左上を基準とします。
この関数は、同じイメージ内の領域にコピーする場合にも使用可能です
(<parameter>dst_image</parameter> が <parameter>src_image</parameter>
と同じ場合) が、領域が重なる場合の結果は予測できません。
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>dst_image</parameter></term>
<listitem>
<para>&gd.image.destination;</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>src_image</parameter></term>
<listitem>
<para>&gd.image.source;</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>dst_x</parameter></term>
<listitem>
<para>
コピー先の x 座標。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>dst_y</parameter></term>
<listitem>
<para>
コピー先の y 座標。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>src_x</parameter></term>
<listitem>
<para>
コピー元の x 座標。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>src_y</parameter></term>
<listitem>
<para>
コピー元の y 座標。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>dst_width</parameter></term>
<listitem>
<para>
コピー先の幅。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>dst_height</parameter></term>
<listitem>
<para>
コピー先の高さ。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>src_width</parameter></term>
<listitem>
<para>&gd.source.width;</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>src_height</parameter></term>
<listitem>
<para>&gd.source.height;</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
&return.success;
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.0.0</entry>
<entry>
<parameter>dst_image</parameter> と
<parameter>src_image</parameter> は、
<classname>GdImage</classname>
クラスのインスタンスを期待するようになりました。
これより前のバージョンでは、
<type>resource</type> を期待していました。
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>単純な例</title>
<para>
この例は、イメージをオリジナルの半分のサイズに再サンプルします。
</para>
<programlisting role="php">
<![CDATA[
<?php
// ファイル
$filename = 'test.jpg';
$percent = 0.5;
// コンテントタイプ
header('Content-Type: image/jpeg');
// 新規サイズを取得します
list($width, $height) = getimagesize($filename);
$new_width = $width * $percent;
$new_height = $height * $percent;
// 再サンプル
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// 出力
imagejpeg($image_p, null, 100);
?>
]]>
</programlisting>
&example.outputs.similar;
<mediaobject>
<alt>出力例 : 単純な例</alt>
<imageobject>
<imagedata fileref="en/reference/image/figures/imagecopyresampled.jpg"/>
</imageobject>
</mediaobject>
</example>
</para>
<para>
<example>
<title>イメージを均等に再サンプルする</title>
<para>
この例は最大の幅もしくは高さが 200 ピクセルのイメージを表示します。
</para>
<programlisting role="php">
<![CDATA[
<?php
// ファイル
$filename = 'test.jpg';
// 最大の高さ・幅を設定します
$width = 200;
$height = 200;
// コンテントタイプ
header('Content-Type: image/jpeg');
// 新規サイズを取得します
list($width_orig, $height_orig) = getimagesize($filename);
$ratio_orig = $width_orig/$height_orig;
if ($width/$height > $ratio_orig) {
$width = $height*$ratio_orig;
} else {
$height = $width/$ratio_orig;
}
// 再サンプル
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
// 出力
imagejpeg($image_p, null, 100);
?>
]]>
</programlisting>
&example.outputs.similar;
<mediaobject>
<alt>出力例 : イメージを均等に再サンプルする</alt>
<imageobject>
<imagedata fileref="en/reference/image/figures/imagecopyresampled_2.jpg"/>
</imageobject>
</mediaobject>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<para>
パレットイメージの制限(255+1色)による問題があります。
カラーの再サンプリングやフィルタリングには通常は255色以上の色が
必要となります。再サンプルするピクセルとその色を計算するために
ある種の近似計算が使用されます。パレットに新しい色を割り当てよう
として失敗すると、(理論的に)最も近い色が選択されます。
それは必ずしも常に可視色とは限りません。そのため、
空白(あるいは不可視な)といった不可思議な結果がもたらされます。
この問題を回避するには、<function>imagecreatetruecolor</function>で
生成されるようなTrueカラーイメージを目的のイメージとして
使用してください。
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<simplelist>
<member><function>imagecopyresized</function></member>
<member><function>imagescale</function></member>
<member><function>imagecrop</function></member>
</simplelist>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->