SlideShare a Scribd company logo
1 of 40
第69回PHP勉強会
php5-gd で画像を弄る話
2013/06/22-
“よや” <yoya@awm.jp>
自己紹介
• http://d.hatena.ne.jp/yoya/
• 某社の画像サーバのメンテナンス要員
– 画質とパフォーマンスチューニングを尐々
• 所属は秘密ですが、↓この ImageMagick を
弄ってる人と名前が同じ
– GIF アニメ生成は本当に GraphicsMagick で行うべき
か?
• http://labs.gree.jp/blog/2013/05/8132/
• 画像の検証や説明資料を作るのに、GD をよ
く使うのと、PHP らしいという事で GD のお
話をします。
発表の目的
• php-gd を使った事がない人向けに紹介
• 使った事がある人には厳しいツッコミに
期待
注)
• 今回は簡単な事が簡単に出来るという話
• 本格的な画像処理(OpenCV 的なの)の話は
しません。
もくじ
• GD概要
– 導入
– 入出力イメージ
• サンプルコード
– 画像ファイル入出力
– 画像をいちから生成
• 応用サンプル
• PHP5.5
GD について
• http://www.boutell.com/gd/ (old page)
• http://libgd.bitbucket.org/ (new page)
• GD は動的画像生成のライブラリ
• gd1.0 では “gif draw” の略
• gd1.0 の後半 Unisys LZW 圧縮特許で GIF をサ
ポート外にしてから “graphics draw”
• ちなみに特許切れにより gd 2.0.28 で再び GIF
をサポートした
gif draw?
• gd1.0 の当初は GIF 出力が目的
• palette 形式を前提にした API
• 途中で JPEG, PNG 等にも対応
• (後付けで) true color 対応、alpha channel 対
応。
• といった経緯を知っていると、使ってて
色々ピンと来る
GD の導入
• PHP の gd extension を有効にします
– 確認
• インストール
– Debian
– 設定ベタ書き (php.ini)
% sudo apt-get install php5-gd
;extension=php_gd2.dll
% php -i | grep GD
GD Support => enabled
GD Version => bundled (2.1.0 compatible)
(前提知識) palette と true color
• 画像引用元) http://labs.gree.jp/blog/2010/10/1263/ GIF
• http://labs.gree.jp/blog/2010/12/1902/ PNG
true color
(direct color)
palette
(pseudo color)
palette
pixels
truecolorpixels(A)RGB(A)RGBRGB
(A)RGB
I I I
(A)RGB(A)RGB …
(A)RGB (A)RGB(A)RGB …
…
…
I I I …
…
入出力フロー
GD リソース画像ファイル 画像ファイル
GIF
PNG
JPEG
GIF
PNG
JPEG
palette
pixels
truecolorpixels
(A)RGB(A)RGBRGB
(A)RGB
I I I
(A)RGB(A)RGB …
(A)RGB (A)RGB(A)RGB …
…
…
I I I …
…
dither:true
ncolor:256
createimagefrom~ image~
入力 出力変換
変換/編集
変換/編集trueColor=0
trueColor=1
ファイル自動判別
参考) PHPでバイナリ
http://www.slideshare.net/yoyayoya1/php-10133775
GD リソース
画像ファイル
GIF
PNG
JPEG
palette
pixels
truecolorpixels
(A)RGB(A)RGBRGB
(A)RGB
I I I
(A)RGB(A)RGB
(A)RGB (A)RGB(A)RGB
…
…
I I I …
…
入力
trueColor=0
trueColor=1
string
$imgdata = file_get_contents($argv[1]);
$im = imagecreatefromstring($imgdata);
PHP の string は
すなわちバイナリ
createimagefromstring
file_get_contents
画像入出力サンプル
• 入力して出力するだけ
• 画像元) http://mitemitei.com/h/(print)031.htm
<php
$im = imagecreatefromgif($argv[1]);
imagejpeg($im);
GIF JPEG
% php gif2jpeg.php tomo_pr_263.gif > tomo_pr_263.jpg
黒?
実はこの画像。。
• 透過GIFでした
– (そして JPEG は透明色を持てないので、決め
打ちで背景を黒にされてる)
画像入出力サンプル(take2)
• 背景色を設定する。(けど GIF はダメ?)
<php
$im = imagecreatefromgif($argv[1]);
$white = imagecolorallocate($im, 255, 255, 255);
imagecolortransparent($im, $white);
imagejpeg($im);
GIF JPEG
% php gif2jpeg.php tomo_pr_263.gif > tomo_pr_263_white.jpg
紫?
そもそもGIF の透過とは?
• 透明度抜きで palette を作り、その内の一
色を透明に指定。(透明色は後付け)
palette
pixels
(A)RGB(A)RGBRGB
I I I …
I I I …
…
transparent
背景を紫で作っ
て
後で透明化
画像入出力サンプル(take3)
• パレットの色を入れ替えてみた
<?php
$im = imagecreatefromgif($argv[1]);
$trans = imagecolortransparent($im);
if ($trans != -1) {
imagecolordeallocate($im, $trans);
$trans2 = imagecolorallocate($im, 255, 255, 255);
}
imagejpeg($im);
GIF JPEG
% php gif2jpeg.php tomo_pr_263.gif > tomo_pr_263_white.jpg
パレットの入れ替え
palette
RGB
RGB
RGB
transparent
palette
RGB
RGB
transparent
RGB
imagecolor
deallocate Imagecolor
allocate
palette
RGB
RGB
RGB
transparent
RGB
imagecolor
deallocate
Imagecolor
allocate
RGB
NG パターン
(index番号が変わる)
RGBRGB
RGB
Index番号を保持して
色を入れ替える。
画像入出力サンプル(take4)
• NG に備えてピクセル上書き
<?php
$im = imagecreatefromgif($argv[1]);
$trans1 = imagecolortransparent($im);
if ($trans1 != -1) {
imagecolordeallocate($im, $trans1);
$trans2 = imagecolorallocate($im, 255, 255, 255);
if ($trans1 != $trans2) {
for ($y = 0 ; $y < imagesy($im) ; $y++) {
for ($x = 0 ; $x < imagesx($im) ; $x++) {
if (imagecolorat($im, $x, $y) === $trans1) {
imagesetpixel($im, $x, $y, $trans2);
}
}
}
}
}
imagejpeg($im);
GIF JPEG
palette
pixels
(A)RGB(A)RGBRGB
I I I …
I I I …
…
transparent
透明色だった場所を、新
しく確保した色indexで上
書き。
(閑話休題)
• 簡単な例を示そうとして、意外と難しい
という。。。
• 気を取り直して、次行きます。
画像生成サンプル
• 真っ黒な画像を新規生成
• 実は imagecreate の時点で全ピクセルのindex
が0なので、imagefill しなくても黒くなります
が、0 が保障される自信が無いので一応実行
してます。
<?php
$im = imagecreate(240, 320);
$black = imagecolorallocate($im, 0, 0, 0);
imagefill($im, 0, 0, $black);
imagepng($im);
palette
pixels
0, 0, 0
0 0 0 …
0 0 0 …
…
% php pureblack.php > pureblack.png
画像生成サンプル (Web版)
• Content-type がないと、大抵テキストと判
断して無理やり文字として表示します。
<?php
$im = imagecreate(240, 320);
$black = imagecolorallocate($im, 0, 0, 0);
imagefill($im, 0, 0, $black);
imagepng($im);
<?php
$im = imagecreate(240, 320);
$black = imagecolorallocate($im, 0, 0, 0);
imagefill($im, 0, 0, $black);
header('Content-type: image/png');
imagepng($im);
GD の流儀
• 色は imagecolorallocate 経由で使う
• true color も allocate 経由 (実際はARGB)
$im = imagecreate(100, 100);
$b = imagecolorallocate($im, 255, 255, 0);
imagefill($im, 0, 0, $b);
$c = imagecolorallocate($im, 255, 0, 255);
imagesetpixel($im, 50, 50, $c);
imagepng($im);
$im = imagecreatetruecolor(240, 320);
$b = imagecolorallocate($im, 255, 255, 0);
imagefill($im, 0, 0, $b);
$c = imagecolorallocate($im, 255, 0, 255);
imagesetpixel($im, 50, 50, $c);
imagepng($im);
// $c = imagecolorallocate($im, 255, 0, 255);
$c = (255 << 16) + (255 < 8) + 0;
Alpha Red Green Blue
1byte 1byte 1byte 1byte
0~127 0~2550~255 0~255
Index
1byte
$c = 0~255
$c = 0~2147483647
(=0x7FFFFFFF)
Index
4 bytes
GD マニュアル
• 後は、これを見れば大体分かります
– http://www.php.net/manual/ja/ref.image.php
応用例
• 色んな形式の画像ファイルを生成
• 色の数をカウントする
• 画像差分抽出
• ドット絵っぽい変換
• 色分布の3D表示
色んな形式の画像ファイルを生
成
• ビットマップ画像フォーマット毎のテス
ト素材
– http://d.hatena.ne.jp/yoya/20110622/gd
• PNG/JPEG/GIF (Web ならこの3つで大体
OK)
• パレット形式/トゥルーカラー形式
• 透明度なし/あり
色の数をカウントする
• colorcount.php
– http://d.hatena.ne.jp/yoya/20120421/php
% php colorcount.php tomo_pr_263.gif
12
$im = imagecreatefromstring(file_get_contents($argv[1]));
$width = imagesx($im); $height = imagesy($im);
$colorcount = array();
for ($x = 0; $x < $width; $x++){
for ($y = 0; $y < $height; $y++){
$colorindex = imagecolorat($im, $x, $y);
$colorcount[$colorindex]++;
}
echo count($colorcount).PHP_EOL;
色数
色の差分抽出
• PHP で画像比較
– http://d.hatena.ne.jp/yoya/20120712/php
• 例) 減色等でどのように画像が変わった
か?
– ハートマークが尐し明るくなった事が分かる
% convert aria.jpg aria.gif
% php bitmap_diff.php aria.jpg aria.gif aria_diff.png
-> =
ドット絵っぽい変換
• ドット絵っぽく見せる変換ツール
– https://github.com/yoya/misc/blob/master/php/d
ottize.php
– 拡大して元のピクセル間に線を引くだけ
• http://awm.jp/~yoya/php/image/dottize.php
色分布の3D表示 (1/3)
• PHP で 3D plot
• http://d.hatena.ne.jp/yoya/20080925
• 使いやすい3Dライブラリが無かったので
自作
– http://awm.jp/~yoya/php/3d/y3d.phps
• その時の下書き
色分布の3D表示 (2/3)
d
display
ユーザの視点
ディスプレイに
表示する位置3Dモデル上の
位置
z
y’
y
色分布の3D表示 (3/3)
• GIF画像の色分布
– http://d.hatena.ne.jp/yoya/20080927
– http://awm.jp/~yoya/php/image/colordist.php
– http://awm.jp/~yoya/php/image/colordist_new.php
PHP5.5 の話
• PHP 5.5 で増えた GD functions
– http://d.hatena.ne.jp/yoya/20130621/gd
imagepalettetotruecolor
imageflip
imagecrop, imagecropauto
imageaffine, imageaffinematrixget, imageaffinematrixconcat
imagescale
imagesetinterpolation
入出力フロー (PHP5.5 gd)
GD リソース
画像ファイ
ル
画像ファイ
ル
GIF
PNG
JPEG
GIF
PNG
JPEG
palette
pixels
truecolorpixels
W
(A)RGB(A)RGBRGB
(A)RGB
I I I
(A)RGB(A)RGB …
(A)RGB (A)RGB(A)RGB …
…
…
I I I …
…
createimagefrom~ image~
入力 出力変換
変換/編集
変換/編集trueColor=0
trueColor=1
WebP WebP
WebP 対応しました!
imagepalettetotruecolor
• imagered.php
– palette より true color の方が編集が楽
$imgdata = file_get_contents($argv[1]);
$im = imagecreatefromstring($imgdata);
imagepalettetotruecolor($im);
for ($y = 0 ; $y < imagesy($im) ; $y++) {
for ($x = 0 ; $x < imagesx($im) ; $x++) {
$c = imagecolorat($im, $x, $y);
$r = ($c >> 16) & 0xFF;
$r2 = $r + 100;
$r2 = ($r2 < 256)?$r:255;
$c2 = ($c & 0x7F00FFFF ) + $r2 << 16;
imagesetpixel($im, $x, $y, $c2);
}
}
imagepng($im);
Alpha Red Green Blue
1byte 1byte 1byte 1byte
0~127 0~2550~255 0~255$c = 0~2147483647
(=0x7FFFFFFF)
Index
4 bytes
+100
palette 形式だと最大色数256
を気にしながら弄るので面
倒
true color なら index 値を直接
ARGB として処理できる
imagered.php
• カラー効果で赤に +100
% php imagered.php tomo_pr_263.gif > tomo_pr_263_red.gif
imageflop
• 縦、横、又は両方で画像をひっくり返す
$imgData = file_get_contents($argv[1]);
$im = imagecreatefromstring($imgData);
imageflip($im, IMG_FLIP_VERTICAL);
echo imagegif($im);
% php imageflip.php tomo_pr_263.gif > tomo_pr_263_flip.gif
その他 PHP 5.5 機能
• imagecropauto
– threshold に色指定できるので、色の境目で crop とか
出来そうです
• imageaffine
– 変換行列をかけて画像を取り出せます (scale, rotate,
skew とかの操作が自在に)
• imagescale
– リサイズのアルゴリズムを指定出来ます
NEAREST_NEIGHBOUR も対応!(多分、今までより綺麗
に)
• Imagesetinterpolation
– rotate 等の補完アルゴリズムを指定出来ます
PHP5.2 で PHP5.5 の gd を動かす
• PHP5.5 の gd を PHP5.2 で動かす方法
– http://d.hatena.ne.jp/yoya/20130622/gd
• 必要なライブラリは用意する。(configure
で無効化出来ないっぽい)
– t1lib でコンパイル失敗するので config.h で
undef
• configure でパスを明示的に指定する
– /usr/~ にライブラリがあっても指定する
• PHP_FE_END は #define で対処
– 参考) http://d.hatena.ne.jp/yoya/20130501/php
GD の限界
• 8bit depth しか扱えない
– 16bit カラーを扱いたい事が結構ある。
ImageMagick の内部形式が大抵16bit なので
• 透明度が 0~127 なので精度が半分
– 本来の alpha と大小が逆なのも分かりにくい
• ピクセルの操作が遠回り
– true color でもパレットインデックス経由を強い
られる
• サムネールが汚いらしい。減色も汚い
• 処理が重たいらしい
– Klabさんが高速化サービスを出す位には重たい
その他
• 文字を埋め込めます
• ブラシ指定で書き込めます。
• 描画図形のプリミティブも色々対応してます
– 線だけでなく円とか多角形とか。
• 注意点
– Windows のメモ帳で UTF-8 として保存すると先頭
に BOM が入って、出力バイナリの先頭にゴミが
入ります。
– (PHP を使う際の一般的な注意ですが、バイナリ
では死活問題)
最後に
• 慣れれば簡単な事が簡単に出来るので、
是非ご活用を
ご清聴ありがとうございました

More Related Content

Similar to php5-gd で画像を弄る話

zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境Yo Ya
 
ngx_small_light at 第2回闇鍋プログラミング勉強会
ngx_small_light at 第2回闇鍋プログラミング勉強会ngx_small_light at 第2回闇鍋プログラミング勉強会
ngx_small_light at 第2回闇鍋プログラミング勉強会Tatsuhiko Kubo
 
画像を縮小するお話
画像を縮小するお話画像を縮小するお話
画像を縮小するお話technocat
 
Imagemagickknowhow
ImagemagickknowhowImagemagickknowhow
ImagemagickknowhowYo Ya
 
GoImagickThumbnail
GoImagickThumbnailGoImagickThumbnail
GoImagickThumbnailYo Ya
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2tamtam180
 
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)tamtam180
 
シェーダー伝道師 第一回
シェーダー伝道師 第一回シェーダー伝道師 第一回
シェーダー伝道師 第一回hixi365
 
Unity名古屋セミナー [Shadowgun]
Unity名古屋セミナー [Shadowgun]Unity名古屋セミナー [Shadowgun]
Unity名古屋セミナー [Shadowgun]MakotoItoh
 
WordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうWordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうHishikawa Takuro
 
リクルートはいかにして、ディープラーニング(深層学習)の導入を成功させたか
リクルートはいかにして、ディープラーニング(深層学習)の導入を成功させたかリクルートはいかにして、ディープラーニング(深層学習)の導入を成功させたか
リクルートはいかにして、ディープラーニング(深層学習)の導入を成功させたかRecruit Technologies
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2Nishida Kansuke
 
ngx_small_lightで動的サムネイル生成 #yapcasia2012
ngx_small_lightで動的サムネイル生成 #yapcasia2012ngx_small_lightで動的サムネイル生成 #yapcasia2012
ngx_small_lightで動的サムネイル生成 #yapcasia2012Tatsuhiko Kubo
 
Imagerをつかってみた
ImagerをつかってみたImagerをつかってみた
ImagerをつかってみたTohru Shinohara
 
「きのこたけのこ戦争に学ぶ画像認識」 プロ生勉強会 第20回@品川
「きのこたけのこ戦争に学ぶ画像認識」 プロ生勉強会 第20回@品川「きのこたけのこ戦争に学ぶ画像認識」 プロ生勉強会 第20回@品川
「きのこたけのこ戦争に学ぶ画像認識」 プロ生勉強会 第20回@品川kirin_nico
 
DXRubyとスプライトエディタ
DXRubyとスプライトエディタDXRubyとスプライトエディタ
DXRubyとスプライトエディタmieki256 blawat
 

Similar to php5-gd で画像を弄る話 (20)

zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境
 
ngx_small_light at 第2回闇鍋プログラミング勉強会
ngx_small_light at 第2回闇鍋プログラミング勉強会ngx_small_light at 第2回闇鍋プログラミング勉強会
ngx_small_light at 第2回闇鍋プログラミング勉強会
 
Inside png
Inside pngInside png
Inside png
 
画像を縮小するお話
画像を縮小するお話画像を縮小するお話
画像を縮小するお話
 
Imagemagickknowhow
ImagemagickknowhowImagemagickknowhow
Imagemagickknowhow
 
GoImagickThumbnail
GoImagickThumbnailGoImagickThumbnail
GoImagickThumbnail
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
 
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)
 
シェーダー伝道師 第一回
シェーダー伝道師 第一回シェーダー伝道師 第一回
シェーダー伝道師 第一回
 
Unity名古屋セミナー [Shadowgun]
Unity名古屋セミナー [Shadowgun]Unity名古屋セミナー [Shadowgun]
Unity名古屋セミナー [Shadowgun]
 
Cyma gdc2011 tabc報告
Cyma gdc2011 tabc報告Cyma gdc2011 tabc報告
Cyma gdc2011 tabc報告
 
WordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうWordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょう
 
リクルートはいかにして、ディープラーニング(深層学習)の導入を成功させたか
リクルートはいかにして、ディープラーニング(深層学習)の導入を成功させたかリクルートはいかにして、ディープラーニング(深層学習)の導入を成功させたか
リクルートはいかにして、ディープラーニング(深層学習)の導入を成功させたか
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
 
animation1.0
animation1.0animation1.0
animation1.0
 
What's Sketch.app
What's Sketch.appWhat's Sketch.app
What's Sketch.app
 
ngx_small_lightで動的サムネイル生成 #yapcasia2012
ngx_small_lightで動的サムネイル生成 #yapcasia2012ngx_small_lightで動的サムネイル生成 #yapcasia2012
ngx_small_lightで動的サムネイル生成 #yapcasia2012
 
Imagerをつかってみた
ImagerをつかってみたImagerをつかってみた
Imagerをつかってみた
 
「きのこたけのこ戦争に学ぶ画像認識」 プロ生勉強会 第20回@品川
「きのこたけのこ戦争に学ぶ画像認識」 プロ生勉強会 第20回@品川「きのこたけのこ戦争に学ぶ画像認識」 プロ生勉強会 第20回@品川
「きのこたけのこ戦争に学ぶ画像認識」 プロ生勉強会 第20回@品川
 
DXRubyとスプライトエディタ
DXRubyとスプライトエディタDXRubyとスプライトエディタ
DXRubyとスプライトエディタ
 

More from Yo Ya

Imageresize nitpick
Imageresize nitpickImageresize nitpick
Imageresize nitpickYo Ya
 
jpeg-guetzli-precautions
jpeg-guetzli-precautionsjpeg-guetzli-precautions
jpeg-guetzli-precautionsYo Ya
 
goimagick-syokai-II
goimagick-syokai-IIgoimagick-syokai-II
goimagick-syokai-IIYo Ya
 
go-thumber-imagick
go-thumber-imagickgo-thumber-imagick
go-thumber-imagickYo Ya
 
chokaizomae
chokaizomaechokaizomae
chokaizomaeYo Ya
 
wildimagebinary
wildimagebinarywildimagebinary
wildimagebinaryYo Ya
 
TwitterImgUpload
TwitterImgUploadTwitterImgUpload
TwitterImgUploadYo Ya
 
コンピュータ画像うんちく
コンピュータ画像うんちくコンピュータ画像うんちく
コンピュータ画像うんちくYo Ya
 
退職PDFメーカーの作り方
退職PDFメーカーの作り方退職PDFメーカーの作り方
退職PDFメーカーの作り方Yo Ya
 
How to read SWF
How to read SWFHow to read SWF
How to read SWFYo Ya
 
PHP AV BINDING
PHP AV BINDINGPHP AV BINDING
PHP AV BINDINGYo Ya
 
PHP でバイナリ変換プログラミング
PHP でバイナリ変換プログラミングPHP でバイナリ変換プログラミング
PHP でバイナリ変換プログラミングYo Ya
 
PHPでのSWF編集とその応用
PHPでのSWF編集とその応用PHPでのSWF編集とその応用
PHPでのSWF編集とその応用Yo Ya
 

More from Yo Ya (13)

Imageresize nitpick
Imageresize nitpickImageresize nitpick
Imageresize nitpick
 
jpeg-guetzli-precautions
jpeg-guetzli-precautionsjpeg-guetzli-precautions
jpeg-guetzli-precautions
 
goimagick-syokai-II
goimagick-syokai-IIgoimagick-syokai-II
goimagick-syokai-II
 
go-thumber-imagick
go-thumber-imagickgo-thumber-imagick
go-thumber-imagick
 
chokaizomae
chokaizomaechokaizomae
chokaizomae
 
wildimagebinary
wildimagebinarywildimagebinary
wildimagebinary
 
TwitterImgUpload
TwitterImgUploadTwitterImgUpload
TwitterImgUpload
 
コンピュータ画像うんちく
コンピュータ画像うんちくコンピュータ画像うんちく
コンピュータ画像うんちく
 
退職PDFメーカーの作り方
退職PDFメーカーの作り方退職PDFメーカーの作り方
退職PDFメーカーの作り方
 
How to read SWF
How to read SWFHow to read SWF
How to read SWF
 
PHP AV BINDING
PHP AV BINDINGPHP AV BINDING
PHP AV BINDING
 
PHP でバイナリ変換プログラミング
PHP でバイナリ変換プログラミングPHP でバイナリ変換プログラミング
PHP でバイナリ変換プログラミング
 
PHPでのSWF編集とその応用
PHPでのSWF編集とその応用PHPでのSWF編集とその応用
PHPでのSWF編集とその応用
 

Recently uploaded

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 

Recently uploaded (9)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 

php5-gd で画像を弄る話