Cellphone Girls / Kyle T. Ramirez

png画像がドコモ携帯で表示されない悩みを持ってませんか?
PCと共通で画像を使いたい場合などにこういった問題が発生します。
特にユーザーが画像を投稿するようなサイトでは、こうした問題がおきます。
嫌になりますね。その気持ち、よく分かりますよ。

この問題はプログラムを使用することで解決することができます。

導入方法

このファイルをimg.cgiとかで保存して、サーバーにアップします。
中身は以下と同じですが、ダブルクォーテーションが全角に変換されたりしてるので、コピペしても動きません。

#!/usr/bin/perl

use strict;
use CGI;
use Image::Magick;

my $cntheader = “jpeg”;
my $kkts = “jpg”;

my $cgi = new CGI;
my %pkv;
foreach my $k ($cgi->param) {
$pkv{$k} = $cgi->param($k);
}

my $mobile = “”;
if($ENV{‘HTTP_USER_AGENT’} =~ /UP.Browser/i && $ENV{‘HTTP_USER_AGENT’} !~ /Vodafone/i){
$mobile = ‘e’;
}elsif($ENV{‘HTTP_USER_AGENT’} =~ /DoCoMo/i){
$mobile = ‘i’;
}elsif($ENV{‘HTTP_USER_AGENT’} =~ /J-PHONE/i || $ENV{‘HTTP_USER_AGENT’} =~ /Vodafone/i || $ENV{‘HTTP_USER_AGENT’} =~ /SoftBank/i){
$mobile = ‘s’;
}elsif($ENV{‘HTTP_USER_AGENT’} =~ /ASTEL/i ||
$ENV{‘HTTP_USER_AGENT’} =~ /PDXGW/i ||
$ENV{‘HTTP_USER_AGENT’} =~ /L-mode/i ||
$ENV{‘HTTP_USER_AGENT’} =~ /DDIPOCKET/i ||
$ENV{‘HTTP_USER_AGENT’} =~ /WILLCOM/i ||
$mobile){
if($mobile){
$mobile = $mobile;
}else{
$mobile = 1;
}
}

if($mobile || index(lc($pkv{url}), “jpg”) >= 0){

}elsif(index(lc($pkv{url}), “gif”) >= 0){
$cntheader = $kkts = “gif”;
}elsif(index(lc($pkv{url}), “png”) >= 0){
$cntheader = $kkts = “png”;
}

my $image = Image::Magick->new;
$image->Read($pkv{url});

print “Content-type: image/$cntheader\n\n”;
binmode STDOUT;
$image->Write(“$cntheader:-“);
undef $image;
exit;

Image::Magickが使えるサーバーじゃないとダメなのですが、私が愛用している安価なさくらのレンタルサーバで使えることを確認しています。

でもって画像タグを以下のように書き換えます。

<img src="http://変換したい画像URL">

<img src="http://設置したURL/img.cgi?url=http://変換したい画像URL">

これで、携帯からのアクセスの場合はJPGに変換されます。
もちろんこれを使った画像数だけプログラムを起動することになりますので、アクセスが多いサイトの場合は負荷にご注意ください。
携帯サイトなら1ページ当たりの(変換したい)画像は数個程度でしょうから、よほどアクセスがなければ大丈夫じゃないかな思います。

SSLのダイアログ対策にも使えるよ!

SSLのページからSSLではない画像を表示しようとするとダイアログが出ますよね。
このプログラムをSSL(共有でも可)の下においておけば、そのダイアログ対策にもなります。

こうした小技があると、随分とサイト制作が楽になりますね。
みなさんも良い情報がありましたら、ぜひ教えてくださいね。