rank表記がほしいということで、昨日こっそり追加してみた。
ラウンジで報告していないにもかかわらず、要望をもらった。
ぁあ、ちゃんと見てるんだなぁ、と。
作った意味はあったなぁ、と。
応えなきゃなぁ、と。
↑
桂小枝風に読まないこと。
てなわけで、またちょっと弄ってみました。
評価よろしく~
rank表記がほしいということで、昨日こっそり追加してみた。
ラウンジで報告していないにもかかわらず、要望をもらった。
ぁあ、ちゃんと見てるんだなぁ、と。
作った意味はあったなぁ、と。
応えなきゃなぁ、と。
↑
桂小枝風に読まないこと。
てなわけで、またちょっと弄ってみました。
評価よろしく~
メンバー(個人)向けのブログパーツをちょっと前に作りました。
ここで公開
明日からの3連休で、もう一度調整します。
※改修予定項目
→ スタイルシートの整理
→ 利用者同士の交流を助ける、ウェブリング機能の実装
ちなみに、ブログじゃなくても、タグを貼り付ければ動きますよ。
背景やボタンとしても使えそうで、今風(?)なWeb素材を作ってみましょう。
このような画像が作れるようになります。
文字を重ねると、ボタンらしくなりますね。
この解説で使用したバージョンは、2.2.4です。
それでは、手順を追って作ってみましょう。
画像として書き出して完成です。
透明度のある、それっぽい画像が出来上がりました。
背景とグラデーションの間にパターン塗りを加えてみました。
雰囲気が変わって、いい感じになります。
こういうWeb素材が使われているのを、よく見かけると思います。
ここで使用したデータファイルをお使いください。
背景画像の色を変えるだけで、いろんなパターンの素材が作れることと思います。
ダウンロードで内容を表示してしまうブラウザの場合には、右クリックメニューから対象を保存してください。
Photoshopでは、こういった作業をマクロにしてしまえば、いろんなサイズでも自動的に作れます。
しかし、GIMPではマウス操作の記録という機能がなく、スクリプトをコーディングしなければなりません。
自動化できるようになるのは、いつになることでしょう…。
HTML/AAはPHPのモジュールです。
スクリプトと同じ階層か、PHPのモジュール用のパスに設置してください。
AAはアスキーアート(Ascii Art)と同じ要領で、アスキーアジャスト(Ascii Adjust)を行います。
このモジュールは、ブラウザに表示する文字列を整形する機能を有します。
このモジュールは、PerlのHTML::AAモジュールの移植版です。
UTF-8への対応も予定しておりますので、しばらくお待ちください。
ご意見、ご感想は、モジュール内に記載されているメールアドレスまでお寄せください。
PEARへの登録方法がよく分かりません。誰か教えて・・・
エンコードはEUC-JP、Shift_JISに対応しています。
解説は、このページが一番詳しく、判りやすいと思います。
文字コードが異なる場合には、正常な結果を得ることができません。
MS Pゴシック12ポイントで表示した場合に限り、正常に表示できると予想されます。
文字列の先頭に半角スペースが出力された場合、それが行頭になるとずれる現象が発生します。
詳しくは、アスキーアートを紹介しているサイト等を参考にしてください。
文字列内に半角スペースの連続が混入していないと仮定します。
require_once( 'HTML/AA.php' ); $aart = new AA( ); printf( '%s Version %s', $aart -> module, $aart -> version );
PHP HTML/AA module Version 0.01
echo $aart -> calcu_euc( '文字列の長さを求める' );
152
echo join( '|', $aart -> divide_euc( '文字列を文字1つの配列に分解する' ) );
文|字|列|を|文|字|1|つ|の|配|列|に|分|解|す|る
// 調整ドットは左側 echo $aart -> adjust_left_euc( '左側の文字', '右側の文字', 256 ); // 調整ドットは右側 echo $aart -> adjust_right_euc( '左側の文字', '右側の文字', 256 );
左側の文字. 右側の文字 左側の文字 .右側の文字
$ary = array( '配列の中から', '整形可能な最小のサイズを', '返します' ); echo $aart -> shorter_euc( $ary );
226
$ary = array( '配列を1行と見立てて', '指定された倍数で', '整形できる最小のサイズと', '何倍かを求める' ); echo join( ':', $aart -> shorter_multiple_euc( 16, $ary, $ary ) );
400:25
サンプルスクリプトのEUC-JPとShift_JISはダウンロード用パッケージに同梱されています。
<html> <head> <style type="text/css"> <!-- table,tr,th,td { border:1px gray solid; border-collapse:collapse; text-align:center; } input,textarea { margin:4px; } input { text-align:center; } //--> </style> </head> <body> <?php require_once( 'HTML/AA.php' ); $aart = new AA( ); printf( '<h1>%s Version %s</h1>', $aart -> module, $aart -> version ); ?> <h3>EUC-JPサンプル</h3> <ul> <li><a href="http://penlabo.net/PHP/HTML-AA.html">HTML/AA(ぺんラボ)</a></li> <li><a href="HTML-AA_euc.php">EUC-JP</a></li> <li><a href="HTML-AA_sjis.php">Shift_JIS</a></li> </ul> <form action="" method="post"> <table> <tr> <td>左側</td> <td><input type="submit" value="整形"></td> <td>右側</td> </tr> <tr> <td> <textarea name="multilineL" cols="50" rows="10" style="font-size:85%">FightAIDS@Home Human Proteome Discovering Dengue Drugs - Together Rosetta@home SIMAP TANPAKU proteins@home SETI@Home Folding@Home CHRONOS</textarea> </td> <td> <input type="text" name="separate" value="│" size="2"> </td> <td> <textarea name="multilineR" cols="50" rows="10" style="font-size:85%">HIVの新薬開発 たんぱく質構造の予測 デング熱治療薬開発プロジェクト たんぱく質構造の予測 たんぱく質の類似性データベースの構築 たんぱく質構造の予測 たんぱく質構造の予測 地球外の知的生命を検出 たんぱく質構造の予測・アルツハイマー解析 ヒトゲノム染色体間法則性解明</textarea> </td> </tr> </table> </form> <div style="font-family:MS Pゴシック;font-size:12pt"> <?php if( isset( $_POST['multilineL'] ) && isset( $_POST['multilineR'] ) ){ aa( $aart ); } function aa( &$aart ){ // mb_splitにもスイッチつけれ mb_regex_encoding( 'EUC-JP' ); // 改行コード除去 $aryL = mb_split( '\x0d\x0a|\x0d|\x0a', $_POST['multilineL'] ); $aryR = mb_split( '\x0d\x0a|\x0d|\x0a', $_POST['multilineR'] ); // 配列の小さいほうを基準に $max = count( $aryL ) < count( $aryR ) ? count( $aryL ) : count( $aryR ); $aryL = array_splice( $aryL, 0, $max ); $aryR = array_splice( $aryR, 0, $max ); // 最短整列ドット数 $minL = $aart -> shorter_euc( $aryL ); $minR = $aart -> shorter_euc( $aryR ); // 整形 for( $i = 0; $i < $max; $i ++ ){ echo $_POST['separate']; echo $aart -> adjust_right_euc( '', $aryL[$i], $minL ); echo $_POST['separate']; echo $aart -> adjust_left_euc( $aryR[$i], '', $minR ); echo $_POST['separate']; echo "<br>\r\n"; } } ?> </div> </body> </html>
│ .FightAIDS@Home│HIVの新薬開発. │ │ .Human Proteome│たんぱく質構造の予測 │ │Discovering Dengue Drugs - Together│デング熱治療薬開発プロジェクト │ │ .Rosetta@home│たんぱく質構造の予測 │ │ .SIMAP│たんぱく質の類似性データベースの構築. │ │ . TANPAKU│たんぱく質構造の予測 │ │ .proteins@home│たんぱく質構造の予測 │ │ SETI@Home│地球外の知的生命を検出 │ │ .Folding@Home│たんぱく質構造の予測・アルツハイマー解析│ │ .CHRONOS│ヒトゲノム染色体間法則性解明. │
各バージョンごとに使い方が変わると思います。ご注意ください。
使い勝手がいいとはいえません。ぼちぼち更新していくかもしれませんが、関数名が変更になる可能性があります。
下のように、バージョンチェックをしたほうがいいかもしれません。
if( $aart -> version != 0.01 ){ echo 'The version of the HTML/AA module is different.'; }
#!/ruby/bin/ruby require 'rss' # RSSファイルのURL url = "http://raa.ruby-lang.org/index.rdf" content = "" open( url ) do |s| content = s.read end # RSSのパース begin rss = RSS::Parser.parse( content ) rescue RSS::InvalidRSSError rss = RSS::Parser.parse( content, false ) end # HTMLの出力開始 print "Content-type: text/html\n\n" # channnelタグ出力 channel = rss.channel printf("<html>\n<head>\n\t<title>RSS - %s</title>\n</head>\n<body>\n", channel.title ) printf( "<h3><a href=\"%s\">%s</a></h3>\n<p>%s</p>\n", channel.link, channel.title, channel.description ) # imageタグ出力 if rss.image != nil then image = rss.image printf( "<p><a href=\"%s\"><img src=\"%s\" alt=\"%s\" align=\"right\"></a></p>\n", image.link, image.url, image.title ) end # itemタグ出力 print "<dl>\n" rss.items.each do |i| printf( "\t<dt><a href=\"%s\">%s</a></dt>\n\t<dd>%s</dd>\n", i.link, i.title, i.description ) end print "</dl>\n" # HTMLの出力終了 print "</body>\n</html>\n" exit;
RSSファイルを参照し、オリジナルのリーダーを作成します。
RSSの解説は、RSSによるサイトの情報の要約と公開を参考にしました。
XML_RSSパッケージの解説は、XML_RSSを参考にしました。
使用したXML_RSSパッケージのバージョンは1.14(0.9.10)でした。
XML_RSSパッケージは、PHPのバージョン5.2.1ではインストールされていません。
XML_RSSをインストールすると、XML_Treeも同時にインストールされます。
pear install -a XML_RSS
<?php
require_once( "XML/RSS.php" );
// RSSファイルのURL
$rss = new XML_RSS( "http://pear.php.net/feeds/latest.rss" );
// RSSのパース
$rss -> parse();
// channnelタグ出力
$channel = $rss -> getChannelInfo();
printf( "<html>\n<head>\n\t<title>RSS - %s</title>\n</head>\n",
$channel['title']
);
printf( "<h1><a href=\"%s\">%s</a></h1>\n<p>%s</p>\n",
$channel['link'],
$channel['title'],
$channel['description']
);
// imageタグ出力
if( isset( $rss -> images ) ){
foreach( $rss -> getImages() as $image ){
if( !count($image) ){ continue; }
printf( "<p><a href=\"%s\"><img src=\"%s\" alt=\"%s\" align=\"right\"></a></p>\n",
$image['link'],
$image['url'],
$image['title']
);
}
}
// itemタグ出力
echo "<dl>\n";
foreach( $rss -> getItems() as $item ){
printf( "\t<dt><a href=\"%s\">%s</a></dt>\n\t\t<dd>%s</dd>\n",
$item['link'],
$item['title'],
isset( $item['description'] ) ? $item['description'] : ""
);
}
echo "</dl>\n";
// HTMLの出力終了
echo "</body>\n</html>";
?>
現在はバージョン1.33が公開されています。
RSSファイルを参照し、オリジナルのリーダーを作成してみます。
RSSの解説は、RSSによるサイトの情報の要約と公開を参考にしました。
このモジュールは、ローカルに保存したファイルのタイムスタンプを比較し、無駄なトラフィックを回避しているそうです。
使用したXML::RSSモジュールのバージョンは1.12でした。
Perlのバージョンが5.8では、インストールされていません。
動作確認を行ったXML::RSSのバージョンは1.12です。最新版は確認しておりません。
以下のように、パッケージを直接指定しなければなりません。
CPANでインストールすると、バージョンは1.32です。
cpan install S/SH/SHLOMIF/XML-RSS-1.32.tar.gz
モジュール名の指定でインストールできます。
ppmでインストールすると、バージョンは1.12です。
ppm install XML-RSS
#!/perl/bin/perl use strict; use XML::RSS; use LWP::Simple; # RSSファイルのURL my $url = 'http://search.cpan.org/uploads.rdf'; # 保存ファイルパス my $file = './rss'; # RSS更新確認(ここで$fileが最新になる) mirror( $url, $file ); # RSSのパース my $rss = new XML::RSS; $rss -> parsefile( $file ); # HTMLの出力開始 print qq|Content-type: text/html\n\n|; # channnelタグ出力 my $channel = $rss -> {'channel'}; printf( qq|<html>\n<head>\n\t<title>RSS - %s</title>\n</head>\n<body>\n|, $channel -> {'title'}, ); printf( qq|<h1><a href="%s">%s</a></h1>\n<p>%s</p>\n|, $channel -> {'link'}, $channel -> {'title'}, $channel -> {'description'}, ); # imageタグ出力 my $image = $rss -> {'image'}; printf( qq|<p><a href="%s"><img src="%s" alt="%s" align="right"></a></p>\n|, $image -> {'link'}, $image -> {'url'}, $image -> {'title'}, ); # itemタグ出力 print qq|<dl>\n|; foreach my $item ( @{$rss -> {'items'}} ){ printf( qq|\t<dt><a href="%s">%s</a></dt>\n\t<dd>%s</dd>\n|, $item->{'link'}, $item->{'title'}, $item->{'description'}, ); } print qq|</dl>\n|; # HTMLの出力終了 print qq|</body>\n</html>|; exit;
Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles MyBase.Load Dim myOlApp As Outlook.Application = CreateObject("Outlook.Application") Dim myNameSpace = myOlApp.GetNamespace("MAPI") Dim myFolder = myNameSpace.GetDefaultFolder(6) Dim i As Integer For i = 1 To myFolder.Items.Count Dim myitem = myFolder.Items(i) ListBox1.Items.Add(myitem.Subject) Next myFolder = Nothing myNameSpace = Nothing myOlApp = Nothing End Sub
Public mail As Hashtable = New Hashtable Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles MyBase.Load Dim myOlApp As Outlook.Application = CreateObject("Outlook.Application") Dim myNameSpace = myOlApp.GetNamespace("MAPI") Dim myFolder = myNameSpace.GetDefaultFolder(6) Dim i As Integer For i = 1 To myFolder.Items.Count Dim myitem = myFolder.Items(i) ListBox1.Items.Add(myitem.Subject) mail(myitem.Subject) = i Next myFolder = Nothing myNameSpace = Nothing myOlApp = Nothing End Sub
Private Sub ListBox1_SelectedIndexChanged( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles ListBox1.SelectedIndexChanged Dim myOlApp As Outlook.Application = CreateObject("Outlook.Application") Dim myNameSpace = myOlApp.GetNamespace("MAPI") Dim myFolder = myNameSpace.GetDefaultFolder(6) Dim myitem = myFolder.Items(mail(ListBox1.Text)) TextBox1.Text = myitem.Body End Sub
このページは、Text Handingを基準に作成されていますが、
翻訳ページではありませんので、ご注意ください。
captionでも作成できますが、とりあえず保留します。
また、コード内において改行が含まれていますが、実際には改行を含まずに入力することが必要です。
サンプルで使用したフォントはあくあフォントです。
文字については、フォントが持っている幅が利用されるため、余白が生まれます。
“-trim“オプションを利用すれば、出来るだけ小さな画像にすることは出来ますが、
座標で決め打ちするような画像の合成時に、誤差の原因となる可能性があるため、利用は控えたほうがいいかもしれません。
オプション | 内容 | 細く |
---|---|---|
-background | 背景の色 | 指定しない場合は白色になり、透明情報を持てる形式で出力する場合には「none」を指定すれば透明になる。 |
-fill | 文字の色 |
文字の色を指定しなければ、背景で塗られた画像が作成される。 ただし、画像サイズは文字の色を指定したときと同じものになる。 |
-pointsize | 文字の大きさ (pt) |
文字の大きさを指定しなくても、画像サイズが指定されていれば自動で調整されるが、 画像サイズが指定されていなければ、おそらく12ptで作成されているらしい。 |
画像サイズは自動的に調整されます。
convert -background white -fill blue -font aquafont.ttf -pointsize 32 label:penlabo.net text1.png
文字サイズは自動的に調整されますが、余白が出来ます。
この余白を調整するには”-gravity“オプションを設定します。
convert -background white -fill blue -font aquafont.ttf -size 256x64 label:penlabo.net text2.png
png画像、256×64ピクセル
文字サイズは自動的に調整されますが、余白が出来ます。
横のサイズのみを指定することにより、縦は自動で調整されます。
convert -background white -fill blue -font aquafont.ttf -size 256x label:penlabo.net text3.png
png画像、256×47ピクセル
文字サイズは自動的に調整されますが、余白が出来ます。
縦のサイズのみを指定することにより、横は自動で調整されます。
convert -background white -fill blue -font aquafont.ttf -size x64 label:penlabo.net text4.png
png画像、336×64ピクセル
文字列に「\n」を含めれば、改行コードも利用できます。
convert -background white -fill blue -font aquafont.ttf -pointsize 32 label:penlabo\n.net text5.png
png画像、113×67ピクセル
テキストファイルを指定すれば、日本語も画像に出来ます。
ただし、文字コードは「UTF-8」で保存する必要がありますが、BOMの有り無しは関係ないようです。
改行も有効なので、スクリプトから画像を作成する際には便利です。
convert -background white -fill blue -font aquafont.ttf -pointsize 32 label:@text6.txt text6.png
png画像、126×34ピクセル
“-annotate“オプションを利用することで、文字を自由に配置できますが、
画像のx座標と座標だけでは、思い通りになりません。
フォントの持つ特性を理解しなければならならず、ちょっとした工夫が必要となります。
とりあえず、何も考えずに座標(0,0)を指定してみましょう。
convert -size 256x64 xc:white -fill blue -font aquafont.ttf -pointsize 32 -annotate +0+0 penlabo.net annotate1.png
png画像、256×64ピクセル
とても悲惨な画像が作成されました。
上部になにやら見えていますが、これでは何一つ判りません。
次は試しにy座標の値を、画像の高さと同じに変更してみましょう。
convert -size 256x64 xc:white -fill blue -font aquafont.ttf -pointsize 32 -annotate +0+64 penlabo.net annotate2.png
今度は、どういう文字が書いてあるのかが判るようになりましたが、今度は下部が切れてしまいました。
2つの画像を見比べると、上下につなぎ合わせれば1つの画像になることが判ります。
“-annotate“でy座標を指定するときには、フォントのベースラインを基準にしなければならないのです。
“-font“、”-poinsize“を基準に求めたベースラインの座標を指定しなければ、思うように配置が出来ないのです。
いろいろ調べましたが、ベースラインの座標を求める方法が見つかりませんでした。
もし、ご存知の方がいらっしゃいましたら、ご教授をお願いいたします。
次の方法を取れば、画像を作ってはそのサイズを求め・・・といった肯定を省くことが出来ます。
ベースラインの座標を求めるには、文字を基準に画像を作成し、余白を除去する”-trim”オプションを追加します。
convert -font aquafont.ttf -pointsize 32 label:penlabo.net -trim info:
背景や文字の色は、指定しなくても問題ありません。
ファイル名を”info:”と指定することで、画像ファイルではなく画像情報が出力されます。
label:penlabo.net LABEL 173x27 176x34+1+5 DirectClass 8-bit
この場合は27ピクセルとわかりました。
convert -size 256x34 xc:white -fill blue -font aquafont.ttf -pointsize 32 -annotate +0+27 penlabo.net annotate3.png
これで、座標を指定して思い通りの場所に文字を描画することができるようになりました。
こちらのコンテンツは非サポートです。
このスクリプトは自由に改変し配布し販売することができます。
他人のスクリプトを読むのが苦手な方には向かないとおもいます。
2018-05-29 記
WCGとは、World Community Gridの略で、
分散コンピューティングBOINCの医療系プロジェクトの名称。
WCGに参加すると、タンパク質の構造予測や解析、新薬の開発に携わることになります。
2007年4月27日に突然UD(United Devices)が終了し、
UDの最強チーム「Team 2ch」のユーザーが移動(後に難民の大移動と呼ばれる)したため、
WCGの弱小チーム「Team 2ch」はその日を境に、強大なチームへと変貌する。
当サイトの管理者である404は、日報支援サイトとしてWCG–Team 2ch:404を運営しており、
このページでは、そのサイトで使用している日報スクリプトの公開を行っております。
日報スクリプトは、割と高度な処理が行われています。
まず、WCGの更新を監視し、情報の取得と解析、そして計算が行われます。
これら一連の処理は、レンタルサーバーで実行することは難しいでしょう。
自宅サーバーを公開できるスキルと、Perlのモジュールを追加できる知識が求められます。
公開しているスクリプトは、Perl5.8.8での動作を確認しています。
モジュールは記憶違いにより、追加(インストール)が必要だったり、
ビルドやバージョンの違い(Perl5.10もあり)で標準モジュールかもしれません。
モジュールの追加方法は、Google先生または404へ直接聞いてください。
ソースを見てください…。m(_ _)m