TwitterのアイコンをAPI経由でアップロードするツールに強制PNGモードを追加した。

TwitterのアイコンをAPI経由でアップロードするツール

ImageMagickとPerlMagickを入れるのがひたすらめんどくさいという理由だけで対応してなかったのですが、アイコンも丸くなるし強制JPGにされるしでうんざりしたので対応しました。
githubには後でpushしておきます。ソースはこんな感じで、左上の1pxの透明度を1から0.99に変更して元画像に極力影響ないようにPNG32に変換しています。

	#PNG変換モード
	if($self->session("png32")){
		my $img = Image::Magick->new;
		$img->Read($image_file);
		$img->Set(alpha => 'On');
		my @pixels = $img->GetPixel(x=>0,y=>0);
		$pixels[3]=0.998; #透明度を99%にする。
		$img->SetPixel(x=>0, y=>0, color=>@pixels);
		binmode(STDOUT);
		$img->Write("PNG32:".$image_file);
		undef $img;
	}

やっぱりImageMagick便利ですね。クライアント側で変換させてもよかったのですが、upico使用ユーザ層のITリテラシー的にクライアントで変換させると余計トラブルになりそうなのでやめました。
みんなもうちょっと自分で調べるとかしてくれるといいんですが。

入れたImageMagickは7.0.6で、PerlMagickがうまいこと入らなかったので以下の記事を参考にしました。
ImageMagickインストール済みのとこからImage::Magick(PerlMagick)をコンパイル・インストールする方法 – Qiita
make perl-sources してなくてハマりました。

追記(2017/06/29)

座標の指定方法が間違ってたので修正しました。