ニュースの見出しと本文で電光掲示板の表示色を変更/ラズパイで電光掲示板 part7

シェアする

Pocket

1.オープニング,見出し,明細色変更

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

具体的には、オープニング、ニュースの見出し、ニュースの明細及びニュースの最後の色を、それぞれ違う色で表示させようと思います。

今回は、ニュース表示なので、part6でやったpythonではなく、phpからコマンドを呼び出すことになります。

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

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

2.プログラム作成

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

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

convert -background black -fill red

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

<?php

header('Content-Type: text/html; charset=UTF-8');

$url = 'http://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;
}
?>

3.テスト実施!問題発生及び解決

実行すると、最終的に出来上がりが、このphp_out.jpgです。
で、これを、イメージとして、pythonのプログラムで流しています。結果は次のようになります。

画面で見ると、色の違いが良くわかりませんね。うーん。50オヤジが、見せてくれたものは、文字色が明確に見えていました。

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

jpgでなく、pngの方が良いのではと言うことで、上記プログラムのjpgを全てpngに変更してやってみたところ、大正解。

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

Pythonでコマンドを呼び出す(part6)はこちら。

電光掲示板の枠を作成、ちょっと、格好良くなったかな!?(part8)はこちら。

スポンサーリンク

シェアする

フォローする