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

2017年10月23日

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

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

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

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

phpでは、コマンド呼び出しは exec文で実施します。

プログラムは、下記の手順で作成します。

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

PHPプログラム作成

色の設定は、convert 文のオプションを使用して実現します。背景は -background、文字色は -fill で実施できます。

上記の手順にあるような色をconvert分の中で指定すれば良いわけです。例として、オープニングの例を示します。

convert -background black -fill red

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

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

さて、これをプログラムにすると次のようになります。

<?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');
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');
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');
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');
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 に変更してやってみたところ大正解です!

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

※気づけば魚へんの漢字の記事も増えてきました

スポンサーリンク

電光掲示板

Posted by mizutan