ラズパイで電光掲示板part7!ニュースの見出し・明細等表示色を変更 

2017年10月23日

前回part6で、プログラムからコマンドを呼び出せることが分かったので、60爺は、師匠50オヤジがやったニュースの見出しの色変えに挑戦します。

具体的には、ニュースの以下の個所をそれぞれ違う色で表示します。

  • オープニング
  • 見出し
  • 明細
  • エンディング

そんなに難しいことはないかと思いますが、思いもしないエラーに見舞われるのが難点です。

まあ、そうなれば、ネタの一つにはなるので、やってみましょうか。

よろしく、ご覧ください。

スポンサーリンク

実施内容

今回は、ニュース表示なので part6(Pythonでコマンドを呼び出す!ラズパイで電光掲示板 part6)で使用した python ではなく、phpからコマンドを呼び出すことになります。

phpでのコマンド呼び出しは、pythonと違い、exec文で実施すればいいようです。

プログラムは、下記の部分を訂正するだけですね。

  1. オープニングを、背景:黒、文字色:赤で表示
  2. 見出しは、背景:黒、文字色:青で表示
  3. 明細は、背景:黒、文字色:白で表示
  4. それぞれを、convertで接続する。
  5. エンディングは、背景:黒、文字色:黄で表示
  6. エンディングをconvertで接続する。

色付けとconvert文による接続が主ですから、プログラムの訂正はそれほど難しくはないですね。

PHPプログラム作成

色の設定は、convert 文のオプション、即ち、背景は -background、文字色は -fill で実施できます。

上記の手順にあるような色をconvert分の中で指定すれば良いわけです。

例として、上記1.オープニングの例を示します。

convert -background black -fill red

同じように、2.見出し、3.明細、5.エンディングは次のようになります。

convert -background black -fill blue
convert -background black -fill white
convert -background black -fill yellow

さて、これらを反映(上記の色表示部分は『—–1.オープニング—–』という形で注釈を入れてあります)したプログラムを以下に示します。

<?php
header('Content-Type: text/html; charset=UTF-8');
$url = 'https://www3.nhk.or.jp/rss/news/cat0.xml';
$xml = @file_get_contents($url);
$json = simplexml_load_string($xml);
$txt = '';
if($json == '') {
$txt = '残念ですがニュースが取得出来ませんでした。';
exec('/root/jsay.sh '.$txt);
}else{
if(isset($json->channel->lastBuildDate)){
$tmp = $json->channel->lastBuildDate;
$date = explode(' ',$tmp);
$time = explode(':',$date[4]);
$time_str = $date[3].'年'.month_name_conv($date[2]).$date[1].'日'.date_name_conv($date[0]).'、'.$time[0].'時'.$time[1].'分時点の、';
$txt .= $time_str;
}
if(isset($json->channel->description)){
$txt .= $json->channel->description.'をお伝えします。';
echo $txt;
echo PHP_EOL;
exec('echo '.$txt.' > /home/pi/php_out.txt');
//-----1.オープニング-----
exec('convert -background black -fill red -font /usr/share/fonts/truetype/fonts-japanese-gothic.ttf -pointsize 16 label:@/home/pi/php_out.txt /home/pi/php_out1.jpg');
$txt = '';
}
$i = 0;
while (isset($json->channel->item[$i])) {
if($i == 0) {
$txt .= 'はじめに、';
}else{
$txt .= '次は、';
}
if(isset($json->channel->item[$i]->title)) {
$txt .= $json->channel->item[$i]->title.'についてのニュ ースです。';
echo $txt;
echo PHP_EOL;
exec('echo '.$txt.' > /home/pi/php_out.txt');
//-----2.見出し-----
exec('convert -background black -fill blue -font /usr/share/fonts/truetype/fonts-japanese-gothic.ttf -pointsize 16 label:@/home/pi/php_out.txt /home/pi/php_out2.jpg');
// exec('/root/jsay.sh '.$sentence[$i]);
$txt = '';
}
if(isset($json->channel->item[$i]->description)) {
$txt .= $json->channel->item[$i]->description;
echo $txt;
echo PHP_EOL;
exec('echo '.$txt.' > /home/pi/php_out.txt');
//-----3.明細-----
exec('convert -background black -fill white -font /usr/share/fonts/truetype/fonts-japanese-gothic.ttf -pointsize 16 label:@/home/pi/php_out.txt /home/pi/php_out3.jpg');
$txt = '';
}
exec('convert +append php_out1.jpg php_out2.jpg php_out3.jpg php_out.jpg');
exec('cp php_out.jpg php_out1.jpg');
$i++;
}
}
$txt .= '以上、'.$time_str.$json->channel->description.'をお伝えいたしました。';
exec('echo '.$txt.' > /home/pi/php_out.txt');
//-----5.エンディング-----
exec('convert -background black -fill yellow -font /usr/share/fonts/truetype/fonts-japanese-gothic.ttf -pointsize 16 label:@/home/pi/php_out.txt /home/pi/php_out2.jpg');
exec('convert +append php_out1.jpg php_out2.jpg php_out.jpg');
echo $txt;
exec('sudo python3 /home/pi/rpi-rgb-led-matrix/python/samples/image-scroller.py --led-no-hardware-pulse yes -c 3 -r 16 -b 50 -i /home/pi/php_out.jpg');
//$txt = ltrim($txt,'0');
//$txt = mb_convert_kana(trim($txt),'N');
//$txt = mb_convert_kana(trim($txt),'A');
//$txt = str_replace('<','',$txt);
//$txt = str_replace('>','として、',$txt);
//$txt = str_replace('(','',$txt);
//$txt = str_replace(')','については、',$txt);
//$txt = str_replace('【','',$txt);
//$txt = str_replace('】','、',$txt);
//$txt = str_replace('「','',$txt);
//$txt = str_replace('」','',$txt);
//$txt = str_replace('『','',$txt);
//$txt = str_replace('』','',$txt);
//$txt = str_replace('-','氷点下',$txt);
//$txt = str_replace('~','から',$txt);
//$txt = preg_replace('/(\s| )/','',$txt);
//$txt = preg_replace('/\n|\r|\r\n|\t|\e|\s/', '', $txt);
//if ($txt != ''){
// $delimiters = '(、|。)';
// $sentence = mb_split($delimiters, $txt);
// $sentence = explode("。",$txt);
// for ($i = 0; $i< count($sentence)-1; $i++) { // $sentence[$i] = $sentence[$i]; // echo 'sentence['.$i.']--->'.$sentence[$i];
// echo PHP_EOL;
// if($sentence[$i] != '。') {
// exec('./jtalk.sh '.$sentence[$i]);
// exec('/root/jsay.sh '.$sentence[$i]);
// $sentence[$i] = '';
// }
// }
//}
function date_name_conv($date_name) {
switch (trim($date_name)) {
case 'Mon,':
$date_name = '月曜日';
break;
case 'Tue,':
$date_name = '火曜日';
break;
case 'Wed.':
$date_name = '水曜日';
break;
case 'Thu,':
$date_name = '木曜日';
break;
case 'Fri,':
$date_name = '金曜日';
break;
case 'Sat,':
$date_name = '土曜日';
break;
case 'Sun,':
$date_name = '日曜日';
break;
default:
$date_name = '';
break;
}
return $date_name;
}
function month_name_conv($month_name) {
switch ($month_name) {
case 'Jan':
$month_name = '1月';
break;
case 'Feb':
$month_name = '2月';
break;
case 'Mar':
$month_name = '3月';
break;
case 'Apr':
$month_name = '4月';
break;
case 'May':
$month_name = '5月';
break;
case 'Jun':
$month_name = '6月';
break;
case 'Jul':
$month_name = '7月';
break;
case 'Aug':
$month_name = '8月';
break;
case 'Sep':
$month_name = '9月';
break;
case 'Oct':
$month_name = '10月';
break;
case 'Nov':
$month_name = '11月';
break;
case 'Dec':
$month_name = '12月';
break;
default:
$month_name = '';
break;
}
return $month_name;
}
?>

意外とあっさりと訂正出来ました。


テスト実施

プログラムが出来たのでテスト開始です。

テスト実行・・・色が出ない?

実行すると、最終的に出来上がるのが php_out.jpg です。

これを、イメージとしてpythonのプログラムで電光掲示板に流しています。

結果は次のようになります。

画面で見ると、色の違いが良くわかりませんね。

うーん。50オヤジが、見せてくれたものは、文字色が鮮明に見えていました。

色の鮮明さを求める!

何が違うのでしょうか?

色々と話をした結果、出力形式が違うのではと言う結論になりました。

イメージの出力形式を jpg でなく、png の方が良いのではと言うことで、上記プログラムの jpg を全て png に変更してやってみたところ大正解です!

文字色がはっきりと分かります。うまくいきました。

参考:ラズパイ – FastAPIとシリアルLEDで電光掲示板をつくったよ

最後に

ラズパイで電光掲示板もpart7となりました!

今回は、ニュースの見出し・明細等表示色を変更してみました。

基本的に色替えと、convert文による画像の接続が主でしたので、プログラム修正自体は、はっきり言って簡単でした。

いざ、実行したところ、画像の形式が違っていたので、色自体が電光掲示板に出ませんでしたが、png形式に変更することで、狙った内容は実現できました。

※気づけば電光掲示板の記事も増えてきました

スポンサーリンク
この記事を書いた人

60爺

60路を越え、RaspberryPi と出会い、その関係でブログ開設(2017/2~)となりました。始めてみると、コツコツやるのが性に合ってしまい、漢字の記事から家の補修・将棋・windows10関係・別名・言い方などジャンルを拡大して今に至ってます。まだまだ、元気なので新たな話題を見つけて皆様に提供できればと思っています。「プロフィールはこちら

電光掲示板

Posted by 60爺