2015/01/27(火)ImageMagickライブラリによる塗りつぶし

殆ど事例が紹介されていなかったので、自分メモ
20150127.png
これは、筆者が開発作業で制作した、気象庁によるXML配信データを基に生成した、日本近海の海上(気象)警報を視覚化したものです。
https://www.basekernel.jp/pc/weather/fishcond/index.html

図中の黄色や橙色、水色は、閉塞領域の単純な塗りつぶしですが、このような簡単な事例が検索してもなかなか出てこない。
昔のパソコンで一般的だった BASIC だと、
paint(X,Y), colorcode,bordercolor1,bordercolor2
みたいにするだけで任意の座標 X,Y を含む bordercolor で示す閉塞領域をcolorcode で塗りつぶすことが出来たのですが、これと同じことをする手法が判らない。

結局、 ImageMagick の本家でそれらしきものを見つけて、わかりにくい説明を基に試行錯誤しました。

いつもの例によって Perl でのやり方ですが、
use Image::Magick ;                     # 画像描画ライブラリ使用宣言
で、ライブラリを宣言し、
 $image = new Image::Magick ;            # 操作オブジェクト生成
 $image->Read('seamap.png') ;            # 元の画像ファイルを読み込む
 $image->FloodfillPaint(x => $position_x,
                        y => $position_y,
                        channel => All,
                        fuzz => '20%',
                        fill => $paintcolor) ;
 $image->Write('seamap.png') ;           # 操作後の画像をファイルに書きだす
 undef ($image) ;
のようにします。
書き出す際のファイル形式は、読み込んだときのファイル形式がデフォルトになるようですが、詳しく検証していません。
FloodfillPaint という関数呼びだしが塗りつぶし処理そのもの。
x に塗りつぶしたい領域を含むX座標(水平方向の座標)、
y に塗りつぶしたい領域を含むY座標(垂直方向の座標)、
fill に塗りつぶしたい色を、rgb文字列形式で指定します。
#ff0000 とすれば赤、#00ff00 とすれば明るい緑、#0000ff とすれば青、
#ffff00 とすれば黄、#ffffff とすれば白、#000000 とすれば黒、
といった具合です。
fuzz は、境界のあいまいさのようなもので、この数値を減らせば境界色判定がシビアになり、数値を増やすと、多少違った色でも塗りつぶしを行うようになります。
fuzz の数値は、実際に試しながら設定するのが早いです。

2015/01/11(日)いまどきのWebページにおけるボタン作成

HTMLが一般化しておよそ20年になりますが、
デザイン化されたリンクボタンは、gif や png 、凝ったものになると jpg で組むのが一般的でしたが、最近は CSS で作るのが一般的になりつつあるようです。
簡単にここまで出来るという一例ということで。。

《HTML側》
 <a class="button"
    style="color:#422; background-color:#3aaef3; text-shadow:1px 1px #344;"
    href="********.html">サイト更新情報<span style="font-size:8pt;"> 2014/12/22 更新</span></a><br>
 <a class="button"
    style="color:#422; background-color:#e66bf3; text-shadow:1px 1px #344;"
    href="********.html">北海道の歴史綴<span style="font-size:8pt;"> 2014/12/22 更新</span></a><br>
 <a class="button"
    style="color:#422; background-color:#ff9d3c; text-shadow:1px 1px #344;"
    href="********.html">北海道の交通綴<span style="font-size:8pt;"> 2014/12/22 更新</span></a><br>
 <a class="button"
    style="color:#422; background-color:#ff9d3c; text-shadow:1px 1px #344;"
    href="********.html">北海道の道の駅<span style="font-size:8pt;"> 2015/01/08 更新</span></a><br>
 <a class="button"
    style="color:#422; background-color:#ddf14b; text-shadow:1px 1px #344;"
    href="********.html">不都合な真実集<span style="font-size:8pt;"> 2014/12/22 更新</span></a><br>
 <a class="button"
    style="color:#422; background-color:#bec970; text-shadow:1px 1px #344;"
    href="http://hankakusai.basekernel.co.jp/">はんかくさい日報  <span style="font-size:8pt;">不定期更新</span></a><br>
 <a class="button"
    style="color:#422; background-color:#3fed77; text-shadow:1px 1px #344;"
    href="********.html">サイトリンク集<span style="font-size:8pt;"> 2014/12/25 更新</span></a><br>
《CSS側(CSS3 に対応しているWebブラウザが必要です)》
.button     { width:13em ;
              padding:5px ; margin:5px ;
              font-size:12pt ;
              text-align:center ;
              color:#fff ;
              text-decoration:none ;
              display:inline-block ;
              background-color:#888 ;
              box-shadow:2px 2px 2px #555;
              text-shadow:1px 1px #555 ;
              border-radius:10px ;
            }
表示はこんな感じになります。
20150111_1.jpg

2015/01/10(土)&lt;table&gt; タグのレスポンシブWebデザイン対応

約4週間前に始めたスマートフォン対応にて、レスポンシブWebデザインを構築している途上で、ここと 元ラジオ少年日誌とその他一部を除いてだいぶ出来てきたところですが、最大のネックは<table> タグの表示処理で、その分、いろいろな対処策が公開されているようです。

筆者では主に3つの手法を使いました。
1)superTable.js (Javascript) を使って、横幅を一定に保ちつつ横スクロール。
20150110_1.jpg20150110_2.jpg

表の左端や最初の行を固定表示にすることもできます。
表の部分を左フリック(指を画面上にて左にサッと滑らす)すると左に、
表の部分を右フリック(指を画面上にて右にサッと滑らす)すると右に、
スクロールします。

このJavascript は有名らしく、現在は Grid という名前に変わっていて、当方が取得したバージョンから見て、大幅に対応が改善されています。
#このJavascript にて、非推奨のものが使われているため、後日 Grid.js へ換装しないといけないかなというところです。。

20150110_3.jpg
20150110_4.jpg
もちろん、横に表示させても大丈夫です。
設置方法は、提起サイトのソースコードを見れば参考になると思います。

2)CSS にて表示体裁を変更する。
20150110_5.jpg20150110_6.jpg

左側はやや複雑なCSS で、汎用化するのはちょっと難しいかもしれません。
ちなみに元ネタ(PC版)はこんな感じ ↓
20150110_7.jpg

右側は、<thead> の左フロートと、<tbody> の block 表示で、これは CSS による <table> のレスポンシブ化手法では一般的なものの様です。
元ネタ(PC版)はこんな感じ ↓
20150110_8.jpg

探せば沢山出てくるのですが、いちいち検索するのも面倒なので、時間がとれるときにここにまとめておきたいと考えています。