忍者ブログ

ひつ(じのひよこが)プログラミングします。
お仕事や趣味で困ったこととか、何度も「あれ?どうだったかしら」と調べたりしたこととか、作ったものとか、こどものこととかを書きます
★前は週末定期更新でしたが今は不定期更新です

2024/04    03« 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  »05

Discord 上などでキャラクターの配置情報を動的に提供する

Discord 上でオンラインセッションをするに際していくつか難しい点がある。その中の1つが視覚的マップの共有が難しい、という点だ。

これを解決するべく、以下のようなものを作ってみた。


この画像は http://hiyo-hitsu.sakura.ne.jp/sn/map.cgi?place=Aさん,,敵,,Bさん, を表示したものである。URL と画像を比較するとお分かりいただけると思うが、これは URL によって誰がどこにいるのかを管理し、サーバ側で動的に画像を作成している。

サーバサイドは CGI で perl を動かしている。サーバは以下のようなコードとなっている。ただし、同じディレクトリに「font.ttf」と「garden.png」を配置している。前者の font.ttf は「適当なフォントをアップロードしてくれ」と言いたいが私が使っているレンタルサーバだとアップロード可能なサイズの制限にひっかかってしまった。なのでサブセットフォントメーカーを使って記号とひらがな、カタカナ、JIS第一水準漢字のみにしぼっている。一覧はググれば割と出てくる。第一水準漢字+記号+ローマ字+カタカナ+ひらがなとか。

#!/usr/bin/perl

use Image::Magick;
use CGI;
$cgi = CGI::new();

$place = $cgi->url_param('place');
@places = split(/,/, $place);
@xPos = (100, 280, 400, 260, 130, 20);
@yPos = (100, 100, 250, 400, 400, 250);

$filename = "garden.png";

my $image = Image::Magick->new;
$image->Read("$filename");

for ($count = 0; $count < 6; $count++) {
	$image->Annotate(
		text=>@places[$count],
		x=>@xPos[$count],y=>@yPos[$count],
		fill=>"#000000",
		strokewidth=>3,
		antialias=>true,
		font=>"font.ttf",
		pointsize=>40
	);
}

print ("Content-type: image/png\n\n");
binmode STDOUT;
$image->Write("png:-");

print "\n\n";
undef $image;
exit();

後はこの URL を容易に操作・ポストできるツールがあれば現実的に Discord 上でセッションできるかもしれない。

PR

コメント

ただいまコメントを受けつけておりません。

ブログ内検索

P R