サムネイル作成にImagerを使う場合のdiff

ついでに。

  • /adiary.conf.cgi
  • /uploader.conf.cgi
  • /diary.skel/parser/default.html

については、上のエントリに上げた各部修正も同時に適用してください。

/info/textparser_tags.txt

--- .\info\textparser_tags.txt	Thu Oct 18 02:04:16 2007
+++ .\info\textparser_tags.txt	Sun Mar  2 00:00:00 2008
@@ -232,12 +232,12 @@
 img#2#link = 画像, image, 2, $1$2
 
 # 標準アップローダ
-image       = 画像アルバム, image, 3,  ${public}image/$1/$2$3
-image#small = 画像アルバム, image, 3,  ${public}image/$1/$2thumbnail/$3.jpg
-image#link  = 画像アルバム, image, 3,  ${public}image/$1/$2$3
+image       = 画像アルバム, image, 3,  ${image_updir}$1/$2$3
+image#small = 画像アルバム, image, 3,  ${image_updir}$1/$2thumbnail/$3
+image#link  = 画像アルバム, image, 3,  ${image_updir}$1/$2$3
+file        = ファイル,     ASCII, 4,  ${image_updir}$2/$3$4
+file:mp3    = mp3ファイル,  ASCII, 4, <a class="mp3player" href="${image_updir}$1/$2$3">#4</a><br><module name="mp3player" file="${image_updir}$1/$2$3" sb="${bc}" lb="${bc}">
 
-file        = ファイル,     ASCII, 4,  ${public}image/$2/$3$4
-file:mp3    = mp3ファイル,  ASCII, 4, <a class="mp3player" href="${public}image/$1/$2$3">#4</a><br><module name="mp3player" file="${public}image/$1/$2$3" sb="${bc}" lb="${bc}">
 
 # example for せりかのアルバム
 album       = 画像アルバム, image, 2,  album/hash/$1/$2?thumbnail

Uploader.pm

--- .\lib\Satsuki\Uploader.pm	Wed Aug 15 03:06:42 2007
+++ .\lib\Satsuki\Uploader.pm	Sun Mar  2 00:00:00 2008
@@ -245,25 +245,35 @@
 	$self->{tag} = $tag;
 	if (! $is_image) { return 0; }
 
+
+####################################################################################
+### Imager 対応に変更。ここから。
+####################################################################################
+
 	#----------------------------------------------------------------------
-	# ImageMagic があるとき、サムネイルを作る
+	# Imager があるとき、サムネイルを作る
 	#----------------------------------------------------------------------
-	if (!$self->{make_thumbnail} || !$ROBJ->check_lib("Image::Magick")) { return 0; }
-	require 'Image/Magick.pm';
+	if (!$self->{make_thumbnail} || !$ROBJ->check_lib("Imager")) { return 0; }
+
+	require 'Imager.pm';
+
 	# サムネイルdirの作成
 	$dir .= $self->{upload_thumbnail_dir};
 	$ROBJ->mkdir($dir);
+
 	# サムネイルファイル
-	$file_name .= '.jpg';
 	my $thumbnail_file = $ROBJ->get_filepath( $dir . $file_name );
 
-	my $image = Image::Magick->new;
-	eval { $image->Read( $save_file_real ) };
-	if ($@) { last; }	# load 失敗
-	$image->Set( quality => ($self->{jpeg_quality} || 60) );
+	# Imager オブジェクトを作成し、画像を読み込み。失敗すれば元ファイル削除。
+	my $image = Imager->new;
+	if (!$image -> read( file => $save_file_real )) {
+		unlink($save_file_real);
+		die $image->errstr;
+	}
 
 	# リサイズ
-	my ($width, $height) = $image->Get('width', 'height');
+	my $width = $image->getwidth();
+	my $height = $image->getheight();
 	my $size = $self->{thumbnail_size};
 	if ($size < 16) { $size=120; }
 	if ($width<$size && $height<$size) {
@@ -275,13 +285,24 @@
 		$width  = int($width*($size/$height));
 		$height = $size;
 	}
-	if ($size) {	# リサイズ
-		$image->Resize(width => $width, height => $height, blur => 0.7);
+
+	if ($size) {    # リサイズ
+		$image = $image -> scale(
+			xpixels => $width,
+			ypixels => $height,
+		);
+
+		# リサイズした場合はファイルに書き出し。
+		# リサイズしなかった場合は下で -r チェック時に元ファイルを表示。
+		$image->write( file => $thumbnail_file) or die $image->errstr;
+		if ($ROBJ->{File_mode}) { chmod($ROBJ->{File_mode}, $thumbnail_file); }
 	}
 
-	# ファイルに書き出し
-	$image->Write($thumbnail_file);
-	if ($ROBJ->{File_mode}) { chmod($ROBJ->{File_mode}, $thumbnail_file); }
+
+####################################################################################
+### Imager 対応に変更。ここまで。
+####################################################################################
+
 
 	#----------------------------------------------------------------------
 	# タグの再生成