Fessのサムネイル生成スクリプト(generate-thumbnail)をリファクタリングしました。主な変更点は以下の通りです。
ImageMagick v7対応
ImageMagick v7ではconvertコマンドがmagickコマンドに変わりました。今回の修正で、v7のmagickコマンドを優先的に使用し、存在しない場合はv6のconvertコマンドにフォールバックするようにしました。
get_imagemagick_cmd() {
if command -v magick >/dev/null 2>&1; then
echo "magick"
elif command -v convert >/dev/null 2>&1; then
echo "convert"
else
echo ""
fi
}
SVGサムネイル生成
SVGファイルのサムネイル生成に対応しました。rsvg-convertコマンドを使用してSVGをPNGに変換します。
elif [[ x"${cmd_type}" = "xsvg" ]] ; then
check_command rsvg-convert
target_file=$(echo "$url" | sed -e "s#^file:/*#/#g")
rsvg-convert -w 100 -h 100 --keep-aspect-ratio "${target_file}" -o "${output_file}"
MIMEタイプによるフォーマット検出
画像ファイルのサムネイル生成時にMIMEタイプを渡せるようにしました。ImageMagickはファイル拡張子からフォーマットを判定することがありますが、一時ファイルには適切な拡張子がない場合があります。MIMEタイプからフォーマットヒントを生成してImageMagickに渡すことで、より確実にフォーマットを識別できるようになりました。
format_hint=""
case "${mimetype}" in
"image/gif") format_hint="gif:" ;;
"image/tiff") format_hint="tiff:" ;;
"image/png") format_hint="png:" ;;
"image/jpeg") format_hint="jpeg:" ;;
"image/bmp"|"image/x-windows-bmp"|"image/x-ms-bmp") format_hint="bmp:" ;;
"image/vnd.adobe.photoshop"|"image/photoshop"|"application/x-photoshop"|"application/photoshop") format_hint="psd:" ;;
esac
${im_cmd} -thumbnail ${image_size} "${format_hint}${target_file}" "${output_file}"
Java側でも、MIMEタイプに基づいて適切な拡張子を持つ一時ファイルを作成するようにしました。
protected String getExtensionFromMimeType(final String mimeType) {
if (mimeType == null) {
return "";
}
return switch (mimeType) {
case "image/gif" -> ".gif";
case "image/tiff" -> ".tiff";
case "image/svg+xml" -> ".svg";
case "image/jpeg" -> ".jpg";
case "image/png" -> ".png";
case "image/bmp", "image/x-windows-bmp", "image/x-ms-bmp" -> ".bmp";
case "image/vnd.adobe.photoshop", "image/photoshop", "application/x-photoshop", "application/photoshop" -> ".psd";
default -> "";
};
}
macOS互換性
rootユーザーのHOMEディレクトリチェックにmacOS対応を追加しました。Linuxでは/rootですが、macOSでは/var/rootになるため、両方をチェックするようにしています。
if [[ x"$HOME" = "x/root" ]] || [[ x"$HOME" = "x/var/root" ]] ; then
HOME=/var/lib/fess
fi
これらの変更はFess 15.4.0に含まれる予定です。