ブログで趣味でプログラミングからお料理まで呟いています。よろしくー。(^-^)/


先月  2021年 8月  来月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 2021
22 23 24 25 26 27 28
29 30 31




文字サイズ変更:
トップページ > Perlについて

●Perlについて●

2021-08-20 04:55:39

画像のサイズを取得して後から置換する方法

スマホ版Snow Web Site Mobileを制作する時、画像の表示でかなり悩みました。
まず、画像を、PC版のものを流用するつもりでしたので、画像のパスでちょっと悩み、また画像の表示が、スマホ版には大きすぎるので、どうしようかと思っておりました。

まず、正規表現で置き換えを行ったのですが、上手くいく画像と上手くいかない画像が出てきて困りました。画像のサイズ取得に関しては、Image::Magick(PerlMagick)を使用しました。

my $contents0 = qq|<a href="https://www.exsample.com">公式サイト</a><center><img src="../sample.jpg"></center>Windows用を選んで、この中で「program_all.exe」を選びます。先頭の「program_del.exe」は、選びませんでした。 dellとついているのですが、これは、これは選びません。<br><br>ダウンロードして、インストールします。いくつか、 next を選ぶと、こんな画面が表示されます。<center><img src="../sample2.png"></center>|;


上記が、テストデータです。
画像タグが2つ入っています。

my $contents1 = ""; my $contents2 = ""; my $contents3 = ""; #何度でも繰り返す while (1) { if ( $contents0 =~ m/^(.+?(/center>))/ ) { $w = 320; $contents1 = $1; $contents0 = $’; # 見つけた繰り返しシーケンスのうしろが次の対象 $contents3 = $’; # 見つけた繰り返しシーケンスのうしろが次の対象 $contents1 =~ s/<img src="(.+?)">/<img src="$1" width="$w">/; $contents2 .= $contents1; $contents1 = ""; }else{ $contents2 .= $contents3; last; # もう目指すパターンはないので while (1) から脱出 } } print "成形後$contents2";


while文で、上記の場合、2回ループしています。一回目は、始めのまで$1に格納しています。そして、s///の置換演算子で、サイズを挿入しています。2回目のループに入るために、$’に残りを格納してあるのを、最初のif文で引っ掛けるために、$contents0に格納します。
そして、最後にelseで残りのテストデータを格納しています。
Print Twitter(test) short URL いいね:33

back to the TOP


PR (i)