ラズパイで電光掲示板part7!ニュースの見出し・明細等表示色を変更
前回part6で、プログラムからコマンドを呼び出せることが分かったので、60爺は、師匠50オヤジがやったニュースの見出しの色変えに挑戦します。
具体的には、ニュースの以下の個所をそれぞれ違う色で表示します。
- オープニング
- 見出し
- 明細
- エンディング
そんなに難しいことはないかと思いますが、思いもしないエラーに見舞われるのが難点です。
まあ、そうなれば、ネタの一つにはなるので、やってみましょうか。
よろしく、ご覧ください。
実施内容
今回は、ニュース表示なので part6(Pythonでコマンドを呼び出す!ラズパイで電光掲示板 part6)で使用した python ではなく、phpからコマンドを呼び出すことになります。
phpでのコマンド呼び出しは、pythonと違い、exec文で実施すればいいようです。
プログラムは、下記の部分を訂正するだけですね。
- オープニングを、背景:黒、文字色:赤で表示
- 見出しは、背景:黒、文字色:青で表示
- 明細は、背景:黒、文字色:白で表示
- それぞれを、convertで接続する。
- エンディングは、背景:黒、文字色:黄で表示
- エンディングを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形式に変更することで、狙った内容は実現できました。
※気づけば電光掲示板の記事も増えてきました
ディスカッション
コメント一覧
まだ、コメントがありません