<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
	<title><![CDATA[ 2021年11月の投稿(時系列順)［3件］ - でんげき☆ Network Service ]]></title>
	<link>https://room.dengeki.jp/tegalog.cgi</link>
	<description><![CDATA[ Raspberry Pi 4 で運用実験中 ]]></description>
	<language>ja</language>
	<copyright>Copyright 2025</copyright>
	<lastBuildDate>Thu, 05 Jun 2025 14:05:45 +0900</lastBuildDate>
	<generator><![CDATA[ <!-- てがろぐ Version: -->Powered by <a href="https://www.nishishi.com/cgi/tegalog/" rel="noreferrer" target="_top">てがろぐ</a> Ver 4.4.5 ]]></generator>
	<!-- BEGIN ENTRIES -->
	<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ Arduino Leonardo (Pro Micro) で… ]]></title>
	<description><![CDATA[ Arduino Leonardo (Pro Micro) でマウスクリック連射装置を作ろう！<br /><img class="embeddedimage " width="200" height="200" src="https://room.dengeki.jp/images/20211203180938-admin.jpg" alt="20211203180938-admin.jpg"><br />　<br />ワンボードマイコンっていうか…ここんとこ Arduino が人気沸騰で気になりますよね！って事なんでモノは試しに安っすい <a class="url labeledlink" href="https://www.amazon.co.jp/gp/product/B086GPX434" rel="noopener noreferrer" target="_blank">VKLSVAN Pro Micro USB ATmega32U4</a> を買ってぼちぼちイジってみることにしました<br /><br /><img class="embeddedimage " width="1422" height="800" src="https://room.dengeki.jp/images/202111130723461-admin.jpeg" alt="202111130723461-admin.jpeg"><br />まぁなんか Arduino にもいろいろあるようで…その中で ATmega32U4 を搭載した Arduino Leonardo と呼ばれるものが HID 機能を搭載しているって事で気になっていました　そんな Arduino Leonardo の互換機が今回購入した Pro Micro って感じです<br />その HID 機能とはなんぞや？って話ですがまぁざっくり PC の標準的なキーボードやマウスを指すようです　要するに USB 接続した Arduino Leonardo (Pro Micro) がキーボードやマウスに化けるって事なんですね<br />そこで今回は連打系ブラウザゲーとして名高い <a class="url labeledlink" href="https://natto0wtr.web.fc2.com/CookieClicker/" rel="noopener noreferrer" target="_blank">CookieClicker</a> を超連射できるボタンを実装してみることにしました<br /><br /><img class="embeddedimage " width="1000" height="957" src="https://room.dengeki.jp/images/20211113072346-admin.jpg" alt="20211113072346-admin.jpg"><br />そんな Pro Micro のピン配列図　なんかいろいろ書いてあるけど…単純な On/Off スイッチを付ける場合は <span class="decorationM" style="background-color:teal;">　<span class="decorationC" style="color:white;">Arduino</span>　</span> と色付けされた 0 から 20 までのピンを使うようです<br /><br /><img class="embeddedimage " width="1067" height="800" src="https://room.dengeki.jp/images/20211113072346-admin.png" alt="20211113072346-admin.png"><br />それを今回はこんな感じで 10 番ピンに配線しました<br />そしてお次はそれを制御するプログラムで…<br /><br />----------<br /><br /><span class="decorationC" style="color:cornflowerblue;">&#35;define RX_LED 17</span> <span class="decorationC" style="color:darkgray;">// RX LED はポート 17 っぽい？</span><br /><span class="decorationC" style="color:cornflowerblue;">&#35;define TX_LED 30</span> <span class="decorationC" style="color:darkgray;">// TX LED はポート 30 っぽい？</span><br /><span class="decorationC" style="color:cornflowerblue;">&#35;define SW 10</span> <span class="decorationC" style="color:darkgray;">// スイッチ用</span><br /><span class="decorationC" style="color:cornflowerblue;">&#35;include</span> <span class="decorationC" style="color:deepskyblue;">&lt;Mouse.h&gt;</span> <span class="decorationC" style="color:darkgray;">// マウス機能を使いたい</span><br /><br /><span class="decorationC" style="color:orange;">void</span> setup() {<br />&nbsp;&nbsp;pinMode(SW, INPUT_PULLUP);<br />&nbsp;&nbsp;Mouse.begin();<br />}<br /><br /><span class="decorationC" style="color:orange;">void</span> loop() {<br />&nbsp;&nbsp;<span class="decorationC" style="color:firebrick;">if</span>(!digitalRead(SW)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(TX_LED, LOW); <span class="decorationC" style="color:darkgray;">// TX LED を点灯</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span class="decorationC" style="color:darkgray;">//Mouse.click();</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span class="decorationC" style="color:darkgray;">//delay(100);</span><br />&nbsp;&nbsp;&nbsp;&nbsp;Mouse.press(MOUSE_LEFT);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span class="decorationC" style="color:darkgray;">//delay(17); // 最速</span><br />&nbsp;&nbsp;&nbsp;&nbsp;delay(<span class="decorationC" style="color:deepskyblue;">20</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;Mouse.release(MOUSE_LEFT);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span class="decorationC" style="color:darkgray;">//delay(9); // 最速</span><br />&nbsp;&nbsp;&nbsp;&nbsp;delay(<span class="decorationC" style="color:deepskyblue;">10</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(TX_LED, HIGH); <span class="decorationC" style="color:darkgray;">// TX LED 消灯</span><br />&nbsp;&nbsp;} <span class="decorationC" style="color:firebrick;">else</span> {<br />&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(RX_LED, LOW); <span class="decorationC" style="color:darkgray;">// RX LED を点灯</span><br />&nbsp;&nbsp;&nbsp;&nbsp;delay(<span class="decorationC" style="color:deepskyblue;">40</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(RX_LED, HIGH); <span class="decorationC" style="color:darkgray;">// RX LED 消灯</span><br />&nbsp;&nbsp;&nbsp;&nbsp;delay(<span class="decorationC" style="color:deepskyblue;">20</span>);<br />&nbsp;&nbsp;}<br />}<br /><br />----------<br /><br />Arduino IDE でこんな感じのを用意してそれをマイコンボードに書き込みます　書き込まれた後に直ちに動作を開始します<br />スイッチが Off の時には基板上の LED が細かく点滅しています　スイッチを On にするとマウスクリックの連射が始まります<br /><br />マウスのクリックには Mouse.click(); って関数と Mouse.press(); Mouse.release(); とを選べるようです<br />Mouse.click(); は…いい感じに「押して離す」をまとめて実行できるようです<br />Mouse.press(); は…ドラッグ操作っていうんですかね　この関数を実行するとマウスボタンが押されたままになり Mouse.release(); を実行するとマウスボタンが離されます<br /><br />どちらの関数をどのようなタイミングで繰り返すかは個々の環境によって違うかと思いますが…<br /><img class="embeddedimage " width="1288" height="997" src="https://room.dengeki.jp/images/20211113072346-admin.jpeg" alt="20211113072346-admin.jpeg"><br />我が家の環境では Mouse.press(); Mouse.release(); を使って 1 秒間に 38 連射を記録しました → <a class="url labeledlink" href="https://www.usamimi.info/~geko/arch_pro/0x002_js/05_mouse/" rel="noopener noreferrer" target="_blank">マウスクリック連射速度テスト</a><br />高橋名人もびっくりな超高速連射を実装できて満足しました！<br /><br />Arduino Leonardo (Pro Micro) の HID 機能は手軽に有用な機能を実装できてなかなか楽しいです　またぼちぼちイジっていきたいと思いました <a href="https://room.dengeki.jp/tegalog.cgi?tag=%41%72%64%75%69%6e%6f" class="taglink" title="Arduino">#Arduino</a> -- Posted by 猫山ぽるか 〔1926文字〕 No.7 ]]></description>
	<link>https://room.dengeki.jp/tegalog.cgi?postid=7</link>
	<guid>https://room.dengeki.jp/tegalog.cgi?postid=7</guid>
	<category>info</category>
	<pubDate>Sat, 13 Nov 2021 07:23:46 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ Arduino Leonardo (Pro Micro) で… ]]></title>
	<description><![CDATA[ Arduino Leonardo (Pro Micro) でマルチメディアキーボードを作ろう！<br /><img class="embeddedimage " width="200" height="200" src="https://room.dengeki.jp/images/20211203181404-admin.jpeg" alt="20211203181404-admin.jpeg"><br />　<br />前回に引き続き Arduino 的な諸々をひとつって事で…マルチメディア・キーボードって云うんですかね？<br /><img class="embeddedimage " width="640" height="480" src="https://room.dengeki.jp/images/20211114113829-admin.png" alt="20211114113829-admin.png"><br />＋α的に実装されている音量調節などのキーとかノート PC でよく見かける Fn キーと併用して使える再生とか早送りなどのキーを ATmega32U4 を搭載した Arduino Leonardo (Pro Micro) でどうにかしてみるお話です<br /><br />そんな今回の実験の様子<br /><img class="embeddedimage " width="1422" height="800" src="https://room.dengeki.jp/images/202111141138293-admin.jpeg" alt="202111141138293-admin.jpeg"><br />以前のマウスクリック超連射実験の回路がくっついたままなんで判りにくいですよね…<br /><br /><img class="embeddedimage " width="1067" height="800" src="https://room.dengeki.jp/images/202111141138291-admin.png" alt="202111141138291-admin.png"><br />申し訳程度に回路図を描いてみたけど…それでも判りづらいですよね（汗　まぁとにかく 2 番ピンと 3 番ピンを使用しました<br /><br />今回のマルチメディア・キーボード(？)的な機能を簡単に実装するためにライブラリを追加してみました<br /><img class="embeddedimage " width="1000" height="982" src="https://room.dengeki.jp/images/202111141138292-admin.jpeg" alt="202111141138292-admin.jpeg"><br />Arduino IDE で &#91;スケッチ&#93; → &#91;ライブラリをインクルード&#93; → &#91;ライブラリ管理&#93; してライブラリ管理画面を出す<br /><br /><img class="embeddedimage " width="1000" height="982" src="https://room.dengeki.jp/images/202111141138291-admin.jpeg" alt="202111141138291-admin.jpeg"><br />目的のライブラリを「hid」ってキーワードで検索して…出てきた「HID-Project」をインストールする　※画面は既にインストール済みだけどまぁそんな感じで（汗<br /><br />後は Arduino IDE でこんな感じのを用意してそれをマイコンボードに書き込みます<br /><br />----------<br /><br /><span class="decorationC" style="color:darkgray;">// include the HID library</span><br /><span class="decorationC" style="color:cornflowerblue;">&#35;include</span> <span class="decorationC" style="color:deepskyblue;">&quot;HID-Project.h&quot;</span> <span class="decorationC" style="color:darkgray;">// 今回インストールしたやつをインクルードする</span><br /><br /><span class="decorationC" style="color:darkgray;">// definitions for each pin used</span><br /><span class="decorationC" style="color:orange;">const int</span> pinLed = LED_BUILTIN;<br /><span class="decorationC" style="color:orange;">const int</span> playButton = <span class="decorationC" style="color:deepskyblue;">2</span>; <span class="decorationC" style="color:darkgray;">// 今回使うピン番号</span><br /><span class="decorationC" style="color:orange;">const int</span> fwdButton = <span class="decorationC" style="color:deepskyblue;">3</span>; <span class="decorationC" style="color:darkgray;">// 今回使うピン番号</span><br /><span class="decorationC" style="color:orange;">const int</span> backButton = <span class="decorationC" style="color:deepskyblue;">4</span>; <span class="decorationC" style="color:darkgray;">// 以下今回は使わない(-_-；)</span><br /><span class="decorationC" style="color:orange;">const int</span> volUpButton = <span class="decorationC" style="color:deepskyblue;">5</span>;<br /><span class="decorationC" style="color:orange;">const int</span> volDwnButton = <span class="decorationC" style="color:deepskyblue;">6</span>;<br /><span class="decorationC" style="color:orange;">const int</span> muteButton = <span class="decorationC" style="color:deepskyblue;">7</span>;<br /><br /><br /><span class="decorationC" style="color:orange;">void</span> setup() {<br />&nbsp;&nbsp;<span class="decorationC" style="color:darkgray;">// define the pin mode for each pin used</span><br />&nbsp;&nbsp;pinMode(pinLed, OUTPUT);<br />&nbsp;&nbsp;pinMode(playButton, INPUT_PULLUP); <span class="decorationC" style="color:darkgray;">// 今回使うピン番号</span><br />&nbsp;&nbsp;pinMode(fwdButton, INPUT_PULLUP); <span class="decorationC" style="color:darkgray;">// 今回使うピン番号</span><br />&nbsp;&nbsp;pinMode(backButton, INPUT_PULLUP); <span class="decorationC" style="color:darkgray;">// 以下今回は使わない(-_-；)</span><br />&nbsp;&nbsp;pinMode(volUpButton, INPUT_PULLUP);<br />&nbsp;&nbsp;pinMode(volDwnButton, INPUT_PULLUP);<br />&nbsp;&nbsp;pinMode(muteButton, INPUT_PULLUP);<br /><br />&nbsp;&nbsp;<span class="decorationC" style="color:darkgray;">// begin HID connection</span><br />&nbsp;&nbsp;Consumer.begin();<br />}<br /><br /><span class="decorationC" style="color:orange;">void</span> loop() {<br />&nbsp;&nbsp;<span class="decorationC" style="color:firebrick;">if</span> (!digitalRead(playButton)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(pinLed, HIGH); <span class="decorationC" style="color:darkgray;">// turn on LED</span><br />&nbsp;&nbsp;&nbsp;&nbsp;Consumer.write(MEDIA_PLAY_PAUSE); <span class="decorationC" style="color:darkgray;">// 一時停止・再生的なコマンド</span><br />&nbsp;&nbsp;&nbsp;&nbsp;delay(<span class="decorationC" style="color:deepskyblue;">500</span>); <span class="decorationC" style="color:darkgray;">// 動作確認用の LED 点滅</span><br />&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(pinLed, LOW); <span class="decorationC" style="color:darkgray;">// turn off LED</span><br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<span class="decorationC" style="color:firebrick;">if</span> (!digitalRead(fwdButton)) {<br />&nbsp;&nbsp;&nbsp; digitalWrite(pinLed, HIGH);<br />&nbsp;&nbsp;&nbsp;&nbsp;Consumer.write(MEDIA_NEXT); <span class="decorationC" style="color:darkgray;">// 次の曲的なコマンド</span><br />&nbsp;&nbsp;&nbsp;&nbsp;delay(<span class="decorationC" style="color:deepskyblue;">500</span>); <span class="decorationC" style="color:darkgray;">// 動作確認用の LED 点滅</span><br />&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite(pinLed, LOW);<br />&nbsp;&nbsp;}<br />}<br /><br />----------<br /><br /><img class="embeddedimage " width="1920" height="1230" src="https://room.dengeki.jp/images/20211114113829-admin.jpeg" alt="20211114113829-admin.jpeg"><br />Ubuntu 20.04.3 LTS と Audacious 3.10.1 で動作チェックしたところ…「再生/一時停止」と「次の曲」の動作をタクトスイッチの押下にて実現できました　やったね！<br /><br />わりと入手しづらいイメージのマルチメディア・キーボード(？)の拡張部分を Arduino Leonardo (Pro Micro) でどうにかできる事が判明しました　後は程よいケースとスイッチを用意すれば完成なんだけど…それはまた後の話ってかんじで<br /><br />　　：<br /><br />他にも機能があるっていうか…キーコードは Arduino/libraries/HID-Project/src/HID-APIs/ConsumerAPI.h に定義されています　※ファイルの場所は環境によって異なる場合があります<br /><br />enum ConsumerKeycode : uint16_t {<br />&nbsp;&nbsp;// Some keys might only work with linux<br />&nbsp;&nbsp;CONSUMER_POWER = 0x30,<br />&nbsp;&nbsp;CONSUMER_SLEEP = 0x32,<br /><br />&nbsp;&nbsp;MEDIA_RECORD = 0xB2,<br />&nbsp;&nbsp;MEDIA_FAST_FORWARD = 0xB3,<br />&nbsp;&nbsp;MEDIA_REWIND = 0xB4,<br />&nbsp;&nbsp;<span class="decorationC" style="color:red;">MEDIA_NEXT</span> = <span class="decorationC" style="color:blue;">0xB5</span>,<br />&nbsp;&nbsp;MEDIA_PREVIOUS = 0xB6,<br />&nbsp;&nbsp;MEDIA_PREV = 0xB6, // Alias<br />&nbsp;&nbsp;MEDIA_STOP = 0xB7,<br />&nbsp;&nbsp;<span class="decorationC" style="color:red;">MEDIA_PLAY_PAUSE</span> = <span class="decorationC" style="color:blue;">0xCD</span>,<br />&nbsp;&nbsp;MEDIA_PAUSE = 0xB0,<br /><br />&nbsp;&nbsp;MEDIA_VOLUME_MUTE = 0xE2,<br />&nbsp;&nbsp;MEDIA_VOL_MUTE = 0xE2, // Alias<br />&nbsp;&nbsp;MEDIA_VOLUME_UP = 0xE9,<br />&nbsp;&nbsp;MEDIA_VOL_UP = 0xE9, // Alias<br />&nbsp;&nbsp;MEDIA_VOLUME_DOWN = 0xEA,<br />&nbsp;&nbsp;MEDIA_VOL_DOWN = 0xEA, // Alias<br /><br />&nbsp;&nbsp;CONSUMER_BRIGHTNESS_UP = 0x006F,<br />&nbsp;&nbsp;CONSUMER_BRIGHTNESS_DOWN = 0x0070,<br /><br />&nbsp;&nbsp;CONSUMER_SCREENSAVER = 0x19e,<br /><br />&nbsp;&nbsp;CONSUMER_PROGRAMMABLE_BUTTON_CONFIGURATION = 0x182,<br />&nbsp;&nbsp;CONSUMER_CONTROL_CONFIGURATION = 0x183,<br />&nbsp;&nbsp;CONSUMER_EMAIL_READER = 0x18A,<br />&nbsp;&nbsp;CONSUMER_CALCULATOR = 0x192,<br />&nbsp;&nbsp;CONSUMER_EXPLORER = 0x194,<br /><br />&nbsp;&nbsp;CONSUMER_BROWSER_HOME = 0x223,<br />&nbsp;&nbsp;CONSUMER_BROWSER_BACK = 0x224,<br />&nbsp;&nbsp;CONSUMER_BROWSER_FORWARD = 0x225,<br />&nbsp;&nbsp;<span class="decorationC" style="color:green;">CONSUMER_BROWSER_REFRESH</span> = <span class="decorationC" style="color:blue;">0x227</span>,<br />&nbsp;&nbsp;CONSUMER_BROWSER_BOOKMARKS = 0x22A,<br /><br />今回使った <span class="decorationC" style="color:red;">MEDIA_PLAY_PAUSE</span> と <span class="decorationC" style="color:red;">MEDIA_NEXT</span> の他にもいろいろあります　例えば <span class="decorationC" style="color:green;">CONSUMER_BROWSER_REFRESH</span> を超連打して…いわゆる F5 アタックを実装するのもいいかもしれません　※やめて！(&gt;_&lt;)ｑ<br /><br />　　：<br /><br />まぁざっくりこんな感じですかね　これを用いてちょっと便利な補助キーボードを作れるとイイナ！ <a href="https://room.dengeki.jp/tegalog.cgi?tag=%41%72%64%75%69%6e%6f" class="taglink" title="Arduino">#Arduino</a> -- Posted by 猫山ぽるか 〔3322文字〕 No.8 ]]></description>
	<link>https://room.dengeki.jp/tegalog.cgi?postid=8</link>
	<guid>https://room.dengeki.jp/tegalog.cgi?postid=8</guid>
	<category>info</category>
	<pubDate>Sun, 14 Nov 2021 11:38:29 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ Perl の GD::Simple モジュールでフォントを指… ]]></title>
	<description><![CDATA[ Perl の GD::Simple モジュールでフォントを指定したりしてみるメモ<br /><img class="embeddedimage " width="200" height="200" src="https://room.dengeki.jp/images/20211203182031-admin.png" alt="20211203182031-admin.png"><br />　<br />初期のインターネットっていうか Web サイト黎明期の CGI と云えば Perl でキマリ！！って時代もありましたよね…って感じすらすっかり忘れ去られたかのように近年では全く話題にもならない Perl ですが「三つ子の魂百まで」なのか何なのかあまりにも手に馴染みすぎてついつい使っちゃうって事はありませんか？　私はあります　いやむしろ未だに他の言語が使えず Perl にどっぷりなんです悪いか！！(-_-#)って事なのか何なのかそんな忘れ去られつつある言語である Perl と…その Perl で画像を扱う GD ライブラリの（主に文字フォント系の）使い方を少しばかり探求してみたかなりニッチな需要的な忘れ物防止メモです<br /><br />そんな Perl の GD ライブラリですが…以下のようにコマンド一発で簡単にインストールできます<br /><span class="decorationC" style="color:green;">sudo apt install libgd-perl</span><br />依存関係とか詳しく調べてないんでアレだけど…ちょっと見た感じでは我が家の環境にいつの間にか libgd-text-perl なんてのも入っていたんで文字フォントの扱いに不具合が発生した時には <span class="decorationC" style="color:green;">sudo apt install libgd-text-perl</span> してみるのもいいかもです（汗<br /><br />あーあと標準的な Raspberry Pi OS のセットアップではゴシック書体の日本語フォントしか入ってないっぽい？　後に説明するけど…フォント名に Sans とだけ付いてるフォントは概ねゴシック書体です　明朝書体には Serif と付くらしいんだけどラズパイにはそれが入ってないみたい？なんで…後の動作確認しやすいように明朝書体が含まれる程よいフォントを追加でインストールしておきます<br /><span class="decorationC" style="color:green;">sudo apt install fonts-ipaexfont</span><br />日本語フォントファイルってのはそれなりに容量が大きいんで…少容量 microSD とかで運用してる方などには要注意かもですがまぁその辺はうまいことどうにかしてやってください（瀧汗<br /><br />※ 追記 ※<br />Google の「No more 豆腐」と呼ばれるフォントのインストール方法<br /><span class="decorationC" style="color:green;">sudo apt install fonts-noto-cjk</span><br />中国語(C)と日本語(J)と韓国語(K)が一緒くたに入っちゃう感じっぽいです<br /><br />そんな下準備が済んだトコロで…現在システムに入ってるフォントの一覧を取得する方法です　それには <span class="decorationC" style="color:green;">fc-list</span> ってコマンドを使うんだけど…日本語に非対応なフォントとかも羅列されて心もち見づらいんでその辺を絞り込んで表示させてみましょう<br /><span class="decorationC" style="color:green;">fc-list :lang=ja | sort | uniq</span><br />sort と uniq は並べ替えてダブり行を除去してくれるんで見やすくなると思います<br />ここで表示される内容は…フォントのパス付きファイル名とフォントファミリー名とスタイルです　後に説明する GD のフォント指定で…何となくフォントのパス付きファイル名で指定してたんだけどそれではダメでデフォルトのフォントが使用され続けてて悩んでたんだけどどうやら「フォントファミリー名：スタイル」で指定するといいって事を突き止めたんで<br /><span class="decorationC" style="color:green;">fc-list -f &apos;%{family}:%{style}\n&apos; :lang=ja | sort | uniq</span><br />このようなオプション指定で実行するといいと思います<br /><br />実行すると（環境によって違うと思うけど）こんな感じの一覧が出ます<br />Droid Sans Fallback:Regular<br />IPAexゴシック,IPAexGothic:Regular<br /><span class="decorationC" style="color:red;">IPAex明朝,IPAexMincho:Regular</span><br />Noto Sans CJK JP,Noto Sans CJK JP Black:Black,Regular<br />Noto Sans CJK JP,Noto Sans CJK JP Bold:Bold,Regular<br />Noto Sans CJK JP,Noto Sans CJK JP DemiLight:DemiLight,Regular<br />Noto Sans CJK JP,Noto Sans CJK JP Light:Light,Regular<br />Noto Sans CJK JP,Noto Sans CJK JP Medium:Medium,Regular<br />Noto Sans CJK JP,Noto Sans CJK JP Regular:Regular<br />Noto Sans CJK JP,Noto Sans CJK JP Thin:Thin,Regular<br />Noto Sans CJK KR,Noto Sans CJK KR Black:Black,Regular<br />---- 中略 ----<br />この中から使いたいフォントの行をコピーして後の GD のフォント指定に使用するといい感じに使えるようです　そして今後は「<span class="decorationC" style="color:red;">IPAex明朝,IPAexMincho:Regular</span>」を使って話を進めていきます<br /><br />それでは早速その辺を使ったサンプルを作ってみますかね<br /><br />----------<br /><br /><span class="decorationC" style="color:darkgray;">&#35;!/usr/bin/perl</span><br /><span class="decorationC" style="color:cornflowerblue;">use</span> GD<span class="decorationC" style="color:firebrick;">::</span>Simple;<br /><br /><span class="decorationC" style="color:orange;">$img_obj</span> <span class="decorationC" style="color:firebrick;">=</span> GD<span class="decorationC" style="color:firebrick;">::</span>Simple<span class="decorationC" style="color:firebrick;">-&gt;</span><span class="decorationC" style="color:mediumblue;">new</span>(500, 500);<br /><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>font(<span class="decorationC" style="color:deepskyblue;">&apos;IPAex明朝,IPAexMincho:Regular&apos;</span>); <span class="decorationC" style="color:darkgray;">&#35; フォント</span><br /><span class="decorationC" style="color:darkgray;">&#35;$img_obj-&gt;font(&apos;/usr/share/fonts/opentype/ipaexfont-mincho/ipaexm.ttf&apos;); &#35; このフォント指定じゃダメみたい</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>fgcolor(<span class="decorationC" style="color:deepskyblue;">&apos;red&apos;</span>); <span class="decorationC" style="color:darkgray;">&#35; 文字色</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>fontsize(30); <span class="decorationC" style="color:darkgray;">&#35; フォントサイズ</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>moveTo(20, 100); <span class="decorationC" style="color:darkgray;">&#35; 始点 x, y</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>string(&quot;<span class="decorationC" style="color:deepskyblue;">日本語フォント表示</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">Raspberry Pi</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">1234567890</span>&quot;); <span class="decorationC" style="color:darkgray;">&#35; 文字列（最後に記述）</span><br /><br /><span class="decorationC" style="color:darkgray;">&#35; ファイルへ出力</span><br /><span class="decorationC" style="color:darkgray;">&#35;open(IMG, &quot;&gt; gd_out1.gif&quot;); &#35; GIF で出力</span><br /><span class="decorationC" style="color:darkgray;">&#35;open(IMG, &quot;&gt; gd_out1.jpg&quot;); &#35; JPEG で出力</span><br /><span class="decorationC" style="color:mediumblue;">open</span>(IMG, <span class="decorationC" style="color:deepskyblue;">&quot;&gt; gd_out1.png&quot;</span>); <span class="decorationC" style="color:darkgray;">&#35; PNG で出力</span><br /><span class="decorationC" style="color:mediumblue;">binmode</span> IMG; <span class="decorationC" style="color:darkgray;">&#35; バイナリ・ストリームへ書き込む</span><br /><span class="decorationC" style="color:darkgray;">&#35;print IMG $img_obj-&gt;gif(); &#35; GIF で出力</span><br /><span class="decorationC" style="color:darkgray;">&#35;print IMG $img_obj-&gt;jpeg(100); &#35; JPEG (品質：0〜100) で出力</span><br /><span class="decorationC" style="color:mediumblue;">print</span> IMG <span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>png(); <span class="decorationC" style="color:darkgray;">&#35; PNG で出力</span><br /><span class="decorationC" style="color:mediumblue;">close</span>(IMG);<br /><br />----------<br /><br />実行すると以下のような感じの画像が生成されると思います<br /><img class="embeddedimage " width="500" height="500" src="https://room.dengeki.jp/images/20211120103516-admin.png" alt="20211120103516-admin.png"><br />今回は PNG で保存してみましたが GIF や JPEG でも保存できます　「ファイルへ出力」の辺りのコメントアウトしてある部分で切り替えられるんで試してみてください<br /><br />　　：<br /><br />そんな Perl で画像を生成するって話だと…既存の画像を読み込んで文字とかを描き込んで使いたい場合があると思います　そんな時には以下のように指定します<br /><a class="url urlimage selflink" href="https://yqn.f5.si/pic/gd_test2.gif"><img src="https://yqn.f5.si/pic/gd_test2.gif" class="embeddedimage" alt="gd_test2.gif"></a> <a class="url urlimage selflink" href="https://yqn.f5.si/pic/gd_test2.jpg"><img src="https://yqn.f5.si/pic/gd_test2.jpg" class="embeddedimage" alt="gd_test2.jpg"></a> <a class="url urlimage selflink" href="https://yqn.f5.si/pic/gd_test2.png"><img src="https://yqn.f5.si/pic/gd_test2.png" class="embeddedimage" alt="gd_test2.png"></a><br />&#91;サンプル画像&#93;<br /><br />----------<br /><br /><span class="decorationC" style="color:darkgray;">&#35;!/usr/bin/perl</span><br /><span class="decorationC" style="color:cornflowerblue;">use</span> GD<span class="decorationC" style="color:firebrick;">::</span>Simple;<br /><br /><span class="decorationC" style="color:darkgray;">&#35;$img_obj = GD::Simple-&gt;newFromGif(&quot;./gd_test2.gif&quot;); # GIF 画像の時</span><br /><span class="decorationC" style="color:darkgray;">&#35;$img_obj = GD::Simple-&gt;newFromJpeg(&quot;./gd_test2.jpg&quot;, 1); # JPEG 画像の時　最後の「1」は True Color のフラグ？（未解明）</span><br /><span class="decorationC" style="color:orange;">$img_obj</span> <span class="decorationC" style="color:firebrick;">=</span> GD<span class="decorationC" style="color:firebrick;">::</span>Simple<span class="decorationC" style="color:firebrick;">-&gt;</span>newFromPng(<span class="decorationC" style="color:deepskyblue;">&quot;./gd_test2.png&quot;</span>, 1); <span class="decorationC" style="color:darkgray;">&#35; PNG 画像の時　最後の「1」は True Color のフラグ？（未解明）</span><br /><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>font(<span class="decorationC" style="color:deepskyblue;">&apos;IPAex明朝,IPAexMincho:Regular&apos;</span>); <span class="decorationC" style="color:darkgray;">&#35; フォント</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>fgcolor(<span class="decorationC" style="color:deepskyblue;">&apos;red&apos;</span>); <span class="decorationC" style="color:darkgray;">&#35; 文字色</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>fontsize(30); <span class="decorationC" style="color:darkgray;">&#35; フォントサイズ</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>moveTo(20, 100); <span class="decorationC" style="color:darkgray;">&#35; 始点 x, y</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>string(&quot;<span class="decorationC" style="color:deepskyblue;">日本語フォント表示</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">Raspberry Pi</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">1234567890</span>&quot;); <span class="decorationC" style="color:darkgray;">&#35; 文字列（最後に記述）</span><br /><br /><span class="decorationC" style="color:darkgray;">&#35; ファイルへ出力</span><br /><span class="decorationC" style="color:darkgray;">&#35;open(IMG, &quot;&gt; gd_out1.gif&quot;); &#35; GIF で出力</span><br /><span class="decorationC" style="color:darkgray;">&#35;open(IMG, &quot;&gt; gd_out1.jpg&quot;); &#35; JPEG で出力</span><br /><span class="decorationC" style="color:mediumblue;">open</span>(IMG, <span class="decorationC" style="color:deepskyblue;">&quot;&gt; gd_out1.png&quot;</span>); <span class="decorationC" style="color:darkgray;">&#35; PNG で出力</span><br /><span class="decorationC" style="color:mediumblue;">binmode</span> IMG; <span class="decorationC" style="color:darkgray;">&#35; バイナリ・ストリームへ書き込む</span><br /><span class="decorationC" style="color:darkgray;">&#35;print IMG $img_obj-&gt;gif(); &#35; GIF で出力</span><br /><span class="decorationC" style="color:darkgray;">&#35;print IMG $img_obj-&gt;jpeg(100); &#35; JPEG (品質：0〜100) で出力</span><br /><span class="decorationC" style="color:mediumblue;">print</span> IMG <span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>png(); <span class="decorationC" style="color:darkgray;">&#35; PNG で出力</span><br /><span class="decorationC" style="color:mediumblue;">close</span>(IMG);<br /><br />----------<br /><br />実行すると以下のように読み込んだ画像の上に文字を描き込んだ画像が出力されます<br /><img class="embeddedimage " width="500" height="689" src="https://room.dengeki.jp/images/202111201035162-admin.png" alt="202111201035162-admin.png"><br />ちゃんと文字が描き込まれていますね　なお色数の多い JPEG と PNG は True Color フラグとなる「1」を指定しておかないと色が正しく再現されないような感じでした<br /><br />　　：<br /><br />お次は複数の画像を読み込んで 1 枚の画像に合成するってのをやってみます<br /><a class="url urlimage selflink" href="https://yqn.f5.si/pic/gd_test2.gif"><img src="https://yqn.f5.si/pic/gd_test2.gif" class="embeddedimage" alt="gd_test2.gif"></a> <a class="url urlimage selflink" href="https://yqn.f5.si/pic/gd_test2.jpg"><img src="https://yqn.f5.si/pic/gd_test2.jpg" class="embeddedimage" alt="gd_test2.jpg"></a> <a class="url urlimage selflink" href="https://yqn.f5.si/pic/gd_test2.png"><img src="https://yqn.f5.si/pic/gd_test2.png" class="embeddedimage" alt="gd_test2.png"></a><br />&#91;サンプル画像&#93;<br /><br />----------<br /><br /><span class="decorationC" style="color:darkgray;">&#35;!/usr/bin/perl</span><br /><span class="decorationC" style="color:cornflowerblue;">use</span> GD<span class="decorationC" style="color:firebrick;">::</span>Simple;<br /><br /><span class="decorationC" style="color:orange;">$img_obj</span> <span class="decorationC" style="color:firebrick;">=</span> GD<span class="decorationC" style="color:firebrick;">::</span>Simple<span class="decorationC" style="color:firebrick;">-&gt;</span><span class="decorationC" style="color:mediumblue;">new</span>(500, 500, 1); <span class="decorationC" style="color:darkgray;">&#35; 最後の「1」は True Color のフラグ？（未解明）</span><br /><br /><span class="decorationC" style="color:orange;">$img_gif</span> <span class="decorationC" style="color:firebrick;">=</span> GD<span class="decorationC" style="color:firebrick;">::</span>Image<span class="decorationC" style="color:firebrick;">-&gt;</span>newFromGif(<span class="decorationC" style="color:deepskyblue;">&quot;./gd_test2.gif&quot;</span>); <span class="decorationC" style="color:darkgray;">&#35; GIF 画像の時</span><br /><span class="decorationC" style="color:orange;">$img_jpg</span> <span class="decorationC" style="color:firebrick;">=</span> GD<span class="decorationC" style="color:firebrick;">::</span>Image<span class="decorationC" style="color:firebrick;">-&gt;</span>newFromJpeg(<span class="decorationC" style="color:deepskyblue;">&quot;./gd_test2.jpg&quot;</span>, 1); <span class="decorationC" style="color:darkgray;">&#35; JPEG 画像の時　最後の「1」は True Color のフラグ？（未解明）</span><br /><span class="decorationC" style="color:orange;">$img_png</span> <span class="decorationC" style="color:firebrick;">=</span> GD<span class="decorationC" style="color:firebrick;">::</span>Image<span class="decorationC" style="color:firebrick;">-&gt;</span>newFromPng(<span class="decorationC" style="color:deepskyblue;">&quot;./gd_test2.png&quot;</span>, 1); <span class="decorationC" style="color:darkgray;">&#35; PNG 画像の時　最後の「1」は True Color のフラグ？（未解明）</span><br /><br /><span class="decorationC" style="color:darkgray;">&#35; 参考までに…読み込んだ画像の簡易な情報を表示</span><br />(<span class="decorationC" style="color:orange;">$width</span>, <span class="decorationC" style="color:orange;">$height</span>) <span class="decorationC" style="color:firebrick;">=</span> <span class="decorationC" style="color:orange;">$img_gif</span><span class="decorationC" style="color:firebrick;">-&gt;</span>getBounds();<br /><span class="decorationC" style="color:orange;">$is_truecolor</span> <span class="decorationC" style="color:firebrick;">=</span> <span class="decorationC" style="color:orange;">$img_gif</span><span class="decorationC" style="color:firebrick;">-&gt;</span>isTrueColor();<br />print <span class="decorationC" style="color:deepskyblue;">&quot;GIF:&#91;</span><span class="decorationC" style="color:orange;">$width</span><span class="decorationC" style="color:deepskyblue;">&#93;&#91;</span><span class="decorationC" style="color:orange;">$height</span><span class="decorationC" style="color:deepskyblue;">&#93;&#91;</span><span class="decorationC" style="color:orange;">$is_truecolor</span><span class="decorationC" style="color:deepskyblue;">&#93;</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">&quot;</span>;<br />(<span class="decorationC" style="color:orange;">$width</span>, <span class="decorationC" style="color:orange;">$height</span>) <span class="decorationC" style="color:firebrick;">=</span> <span class="decorationC" style="color:orange;">$img_jpg</span><span class="decorationC" style="color:firebrick;">-&gt;</span>getBounds();<br /><span class="decorationC" style="color:orange;">$is_truecolor</span> <span class="decorationC" style="color:firebrick;">=</span> <span class="decorationC" style="color:orange;">$img_jpg</span><span class="decorationC" style="color:firebrick;">-&gt;</span>isTrueColor();<br />print <span class="decorationC" style="color:deepskyblue;">&quot;JPG:&#91;</span><span class="decorationC" style="color:orange;">$width</span><span class="decorationC" style="color:deepskyblue;">&#93;&#91;</span><span class="decorationC" style="color:orange;">$height</span><span class="decorationC" style="color:deepskyblue;">&#93;&#91;</span><span class="decorationC" style="color:orange;">$is_truecolor</span><span class="decorationC" style="color:deepskyblue;">&#93;</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">&quot;</span>;<br />(<span class="decorationC" style="color:orange;">$width</span>, <span class="decorationC" style="color:orange;">$height</span>) <span class="decorationC" style="color:firebrick;">=</span> <span class="decorationC" style="color:orange;">$img_png</span><span class="decorationC" style="color:firebrick;">-&gt;</span>getBounds();<br /><span class="decorationC" style="color:orange;">$is_truecolor</span> <span class="decorationC" style="color:firebrick;">=</span> <span class="decorationC" style="color:orange;">$img_png</span><span class="decorationC" style="color:firebrick;">-&gt;</span>isTrueColor();<br />print <span class="decorationC" style="color:deepskyblue;">&quot;PNG:&#91;</span><span class="decorationC" style="color:orange;">$width</span><span class="decorationC" style="color:deepskyblue;">&#93;&#91;</span><span class="decorationC" style="color:orange;">$height</span><span class="decorationC" style="color:deepskyblue;">&#93;&#91;</span><span class="decorationC" style="color:orange;">$is_truecolor</span><span class="decorationC" style="color:deepskyblue;">&#93;</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">&quot;</span>;<br /><br /><span class="decorationC" style="color:darkgray;">&#35; コピー元オブジェクト, コピー先X座標, コピー先Y座標, コピー元X座標, コピー元Y座標, 横サイズ, 縦サイズ</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>copy(<span class="decorationC" style="color:orange;">$img_gif</span>, 0, 150, 200, 140, 200, 200); <span class="decorationC" style="color:darkgray;">&#35; GIF 画像をコピーする</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>copy(<span class="decorationC" style="color:orange;">$img_jpg</span>, 180, 280, 240, 135, 200, 200); <span class="decorationC" style="color:darkgray;">&#35; JPEG 画像をコピーする</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>copy(<span class="decorationC" style="color:orange;">$img_png</span>, 300, 100, 140, 140, 200, 200); <span class="decorationC" style="color:darkgray;">&#35; PNG 画像をコピーする</span><br /><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>font(<span class="decorationC" style="color:deepskyblue;">&apos;IPAex明朝,IPAexMincho:Regular&apos;</span>); <span class="decorationC" style="color:darkgray;">&#35; フォント</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>fgcolor(<span class="decorationC" style="color:deepskyblue;">&apos;red&apos;</span>); <span class="decorationC" style="color:darkgray;">&#35; 文字色</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>fontsize(30); <span class="decorationC" style="color:darkgray;">&#35; フォントサイズ</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>moveTo(20, 100); <span class="decorationC" style="color:darkgray;">&#35; 始点 x, y</span><br /><span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>string(&quot;<span class="decorationC" style="color:deepskyblue;">日本語フォント表示</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">Raspberry Pi</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">1234567890</span>&quot;); <span class="decorationC" style="color:darkgray;">&#35; 文字列（最後に記述）</span><br /><br /><span class="decorationC" style="color:darkgray;">&#35; ファイルへ出力</span><br /><span class="decorationC" style="color:darkgray;">&#35;open(IMG, &quot;&gt; gd_out1.gif&quot;); &#35; GIF で出力</span><br /><span class="decorationC" style="color:darkgray;">&#35;open(IMG, &quot;&gt; gd_out1.jpg&quot;); &#35; JPEG で出力</span><br /><span class="decorationC" style="color:mediumblue;">open</span>(IMG, <span class="decorationC" style="color:deepskyblue;">&quot;&gt; gd_out1.png&quot;</span>); <span class="decorationC" style="color:darkgray;">&#35; PNG で出力</span><br /><span class="decorationC" style="color:mediumblue;">binmode</span> IMG; <span class="decorationC" style="color:darkgray;">&#35; バイナリ・ストリームへ書き込む</span><br /><span class="decorationC" style="color:darkgray;">&#35;print IMG $img_obj-&gt;gif(); &#35; GIF で出力</span><br /><span class="decorationC" style="color:darkgray;">&#35;print IMG $img_obj-&gt;jpeg(100); &#35; JPEG (品質：0〜100) で出力</span><br /><span class="decorationC" style="color:mediumblue;">print</span> IMG <span class="decorationC" style="color:orange;">$img_obj</span><span class="decorationC" style="color:firebrick;">-&gt;</span>png(); <span class="decorationC" style="color:darkgray;">&#35; PNG で出力</span><br /><span class="decorationC" style="color:mediumblue;">close</span>(IMG);<br /><br />----------<br /><br />実行すると以下のように読み込んだ画像の指定範囲を切り抜き合成してその上に文字を描き込んだ画像が出力されます<br /><img class="embeddedimage " width="500" height="500" src="https://room.dengeki.jp/images/202111201035161-admin.png" alt="202111201035161-admin.png"><br />なお画像の copy にはパラメータを全て指定する必要があるようです　ちょっと面倒ですね(-_-；)　今回は指定範囲を切り抜くような形でコピーしたけど…サイズが不定な画像を読み込んだ際に正しく範囲指定できるように読み込んだ画像サイズを取得できる getBounds ってのも使っているので参考までに<br /><br />なお既存のファイルを読み込む際に newFromGif や newFromJpeg や newFromPng といった感じに予め画像フォーマットを知っておく必要があるようです　しかしざっと調べた感じでは GD で画像フォーマットを調べる術がないようなんで…ちょっと困りますね<br />そこで標準的に用意されている file コマンドを使って画像フォーマットを調べるサンプルを即興で用意してみました<br /><br />----------<br /><br /><span class="decorationC" style="color:darkgray;">&#35;!/usr/bin/perl</span><br /><br /><span class="decorationC" style="color:orange;">$cmd</span> = <span class="decorationC" style="color:deepskyblue;">&apos;file -b -i&apos;</span>; <span class="decorationC" style="color:darkgray;">&#35; file コマンドを使う</span><br /><span class="decorationC" style="color:orange;">$file</span> = <span class="decorationC" style="color:deepskyblue;">&apos;./gd_test2.gif&apos;</span>; <span class="decorationC" style="color:darkgray;">&#35; 画像ファイル名 &#91;GIF&#93;</span><br /><span class="decorationC" style="color:darkgray;">&#35;$file = &apos;./gd_test2.jpg&apos;; &#35; 画像ファイル名 &#91;JPEG&#93;</span><br /><span class="decorationC" style="color:darkgray;">&#35;$file = &apos;./gd_test2.png&apos;; &#35; 画像ファイル名 &#91;PNG&#93;</span><br /><br />chomp(<span class="decorationC" style="color:orange;">$res</span> = `<span class="decorationC" style="color:orange;">$cmd</span> <span class="decorationC" style="color:orange;">$file</span>`); <span class="decorationC" style="color:darkgray;">&#35; コマンドを実行して出力を取り込む</span><br />if (<span class="decorationC" style="color:orange;">$?</span>) { die <span class="decorationC" style="color:deepskyblue;">&quot;Command error:&quot;</span>; } <span class="decorationC" style="color:darkgray;">&#35; 何らかのエラーが発生</span><br />print &quot;<span class="decorationC" style="color:orange;">$res</span><span class="decorationC" style="color:olivedrab;">\n</span>&quot;; <span class="decorationC" style="color:darkgray;">&#35; コマンドを実行した出力はこんな感じ</span><br /><br />if (<span class="decorationC" style="color:orange;">$res</span> =~ <span class="decorationC" style="color:deepskyblue;">/^cannot open/</span>) { <span class="decorationC" style="color:darkgray;">&#35; file コマンドが何らかのエラーを返した</span><br />&nbsp;&nbsp;print <span class="decorationC" style="color:deepskyblue;">&quot;File error:</span> <span class="decorationC" style="color:orange;">$file</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">&quot;</span>;<br />} elsif (<span class="decorationC" style="color:orange;">$res</span> =~ <span class="decorationC" style="color:deepskyblue;">/^image</span><span class="decorationC" style="color:olivedrab;">\/</span><span class="decorationC" style="color:deepskyblue;">gif;/</span>) { <span class="decorationC" style="color:darkgray;">&#35; GIF ファイルらしい</span><br />&nbsp;&nbsp;print &quot;[<span class="decorationC" style="color:olivedrab;">\$</span><span class="decorationC" style="color:deepskyblue;">img_obj = GD::Simple-&gt;newFromGif(</span><span class="decorationC" style="color:olivedrab;">\&quot;</span><span class="decorationC" style="color:orange;">$file</span><span class="decorationC" style="color:olivedrab;">\&quot;</span><span class="decorationC" style="color:deepskyblue;">);</span> を使う]<span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">&quot;</span>;<br />} elsif (<span class="decorationC" style="color:orange;">$res</span> =~ <span class="decorationC" style="color:deepskyblue;">/^image</span><span class="decorationC" style="color:olivedrab;">\/</span><span class="decorationC" style="color:deepskyblue;">jpeg;/</span>) { <span class="decorationC" style="color:darkgray;">&#35; JPEG ファイルらしい</span><br />&nbsp;&nbsp;print &quot;[<span class="decorationC" style="color:olivedrab;">\$</span><span class="decorationC" style="color:deepskyblue;">img_obj = GD::Simple-&gt;newFromJpeg(</span><span class="decorationC" style="color:olivedrab;">\&quot;</span><span class="decorationC" style="color:orange;">$file</span><span class="decorationC" style="color:olivedrab;">\&quot;</span><span class="decorationC" style="color:deepskyblue;">);</span> を使う]<span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">&quot;</span>;<br />} elsif (<span class="decorationC" style="color:orange;">$res</span> =~ <span class="decorationC" style="color:deepskyblue;">/^image</span><span class="decorationC" style="color:olivedrab;">\/</span><span class="decorationC" style="color:deepskyblue;">png;/</span>) { <span class="decorationC" style="color:darkgray;">&#35; PNG ファイルらしい</span><br />&nbsp;&nbsp;print &quot;[<span class="decorationC" style="color:olivedrab;">\$</span><span class="decorationC" style="color:deepskyblue;">img_obj = GD::Simple-&gt;newFromPng(</span><span class="decorationC" style="color:olivedrab;">\&quot;</span><span class="decorationC" style="color:orange;">$file</span><span class="decorationC" style="color:olivedrab;">\&quot;</span><span class="decorationC" style="color:deepskyblue;">);</span> を使う]<span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">&quot;</span>;<br />} else { <span class="decorationC" style="color:darkgray;">&#35; それ以外のファイルっぽい</span><br />&nbsp;&nbsp;print <span class="decorationC" style="color:deepskyblue;">&quot;扱えないファイルです(-_-；)</span><span class="decorationC" style="color:olivedrab;">\n</span><span class="decorationC" style="color:deepskyblue;">&quot;</span>;<br />}<br /><br />----------<br /><br />file コマンドについて詳しく調べてないんでアレなんだけど…これで概ね画像フォーマットを特定できると思います　この辺ちょっと面倒ですね(-_-；)<br /><br />まぁそんなこなんで時既に情報が古すぎて調べられない GD::Simple のアレこれをまとめてみました　この GD::Simple は…その昔の N88-Disk Basic の LINE 文や CIRCLE 文とかでお絵描きしてた頃のようなシンプルな操作で作画できて懐かしく思ったりしながら愛用しています　しょーみこれを今さらわざわざ使おうって思う人も居ないかなーって思いつつ今後の参考ってことで残しておきます　長々とお疲れさまでした！ <a href="https://room.dengeki.jp/tegalog.cgi?tag=%52%61%73%70%62%65%72%72%79%20%50%69" class="taglink" title="Raspberry Pi">#&#91;Raspberry Pi&#93;</a> <a href="https://room.dengeki.jp/tegalog.cgi?tag=%50%65%72%6c" class="taglink" title="Perl">#Perl</a> -- Posted by 猫山ぽるか 〔7610文字〕 No.9 ]]></description>
	<link>https://room.dengeki.jp/tegalog.cgi?postid=9</link>
	<guid>https://room.dengeki.jp/tegalog.cgi?postid=9</guid>
	<category>info</category>
	<pubDate>Sat, 20 Nov 2021 10:26:41 +0900</pubDate>
</item>

	<!-- END ENTRIES -->
</channel>
</rss>

