Hatena::ブログ(Diary)

ザリガニが見ていた...。 このページをアンテナに追加 RSSフィード

2013-03-12

独自のPDFのQuartsフィルタを追加する

以前の日記「約1/30でも割と見られるPDFに圧縮しておく」でも試した、プレビュー.app >> ファイル >> 書き出し... のPDFのQuartsフィルタ:Reduce File Size。

f:id:zariganitosh:20130312100507p:image:w450

ファイルの圧縮率は抜群なんだけど、細かい文字などは潰れてしまって判読不能。その時は使い物にならないと思って、諦めていた。

Reduce File Size59KB
元画像4.5MB

ところが、最近このPDFのQuartsフィルタを自分好みに変更する方法を知った!

PDFのQuartsフィルタの在処

  • システムが定義するすべてのQuartsフィルタは、以下のファイルパスに存在する。
$ ls -l /System/Library/Filters
total 224
−rw-r--r--  1 root  wheel  37563  9 19 17:47 Black & White.qfilter
−rw-r--r--  1 root  wheel  44455  9 19 17:47 Blue Tone.qfilter
−rw-r--r--  1 root  wheel  79369  9 19 17:47 Create Generic PDFX-3 Document.qfilter
−rw-r--r--  1 root  wheel  44475  9 19 17:47 Gray Tone.qfilter
−rw-r--r--  1 root  wheel   4772  9 19 17:47 Lightness Decrease.qfilter
−rw-r--r--  1 root  wheel   4736  9 19 17:47 Lightness Increase.qfilter
−rw-r--r--  1 root  wheel   1133  9 19 17:47 Reduce File Size.qfilter
−rw-r--r--  1 root  wheel  44480  9 19 17:47 Sepia Tone.qfilter
  • /System/Library/Filtersフォルダ内のファイル名がそのままQuartzフィルタとして表示されているのだ。

f:id:zariganitosh:20130312112759p:image:w450

Quartzフィルタの内容

  • /System/Library/Filters/Reduce File Size.qfilterの内容を見てみると、以下のようなxmlファイルであった。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Domains</key>
	<dict>
		<key>Applications</key>
		<true/>
		<key>Printing</key>
		<true/>
	</dict>
	<key>FilterData</key>
	<dict>
		<key>ColorSettings</key>
		<dict>
			<key>DocumentColorSettings</key>
			<dict>
				<key>CustomLHSCorrection</key>
				<array>
					<integer>8</integer>
					<integer>8</integer>
					<integer>8</integer>
				</array>
			</dict>
			<key>ImageSettings</key>
			<dict>
				<key>Compression Quality</key>
				<real>0.0</real>
				<key>ImageCompression</key>
				<string>ImageJPEGCompress</string>
				<key>ImageScaleSettings</key>
				<dict>
					<key>ImageScaleFactor</key>
					<real>0.5</real>
					<key>ImageScaleInterpolate</key>
					<true/>
					<key>ImageSizeMax</key>
					<integer>512</integer>
					<key>ImageSizeMin</key>
					<integer>128</integer>
				</dict>
			</dict>
		</dict>
	</dict>
	<key>FilterType</key>
	<integer>1</integer>
	<key>Name</key>
	<string>Reduce File Size</string>
</dict>
</plist>
  • 注目すべきは、中段<key>ImageSettings</key>以降の部分。
  • 画像ファイルの品質を決定するであろう、いくつかの設定キーと値が見える。
<key>Compression Quality</key>0.0
<key>ImageScaleFactor</key>0.5
<key>ImageSizeMax</key>512

独自のQuartzフィルタを作る

  • 上記のQuartsフィルタの定義ファイルをコピーして、以下のように修正してみた。
<key>Compression Quality</key>0.0JPEGの画像品質。-1から+1の範囲。-1が最低、+1が最高、0は中間。
品質が低くなるほど、ブロックノイズが増えるが、ファイルサイズは小さくなる。
<key>ImageScaleFactor</key>1.0以下のイメージサイズに対する倍率(0〜1)と思われる。1.0なら3508、0.5なら1754と解釈されるのだと思う。
<key>ImageSizeMax</key>3508PDFに保存する画像の最大サイズを指定する。
<key>Name</key>Reduce File Size (customize)この値がQuartzフィルタの項目として表示される。ファイル名が表示されるのではない。
  • そして、/Library/Filters/Reduce File Size (customize).qfilter として保存するのだ。
    • /Library/Filters/ は存在しなかったので、自分で追加した。
  • すると、Quartzフィルタに追加したReduce File Size (customize)が現れるのである。

f:id:zariganitosh:20130312144709p:image:w450

ColorSyncユーティリティで編集する

  • xmlをちゃんと理解するのは難しいのだけど、/アプリケーション/ユーティリティ/ColorSyncユーティリティを起動すると、上記xmlはGUIから編集できるのだ。

f:id:zariganitosh:20130312144710p:image:w450

  • ちなみに、左下の[+]ボタンを押して「新規追加」したり、右側の▼ボタンを押して「フィルタを複製」できるのだけど、保存先は$HOME/Library/Filters/ 以下になる。
  • ところが、$HOME/Library/Filters/ のQuartzフィルタは、プレビュー.appには表示されないのだ...。(残念。不具合か?)
  • 起動ディスク直下の /Library/Filters/ のQuartzフィルタは、ちゃんとプレビュー.appに表示された。

設定方法を探る

イメージのサンプリング >> ピクセルで指定する
  • なぜ「イメージのサンプリング」の「最大:3508ピクセル」にしたかと言えば...
    • A4サイズの長辺の長さ297mm。(自分の環境では、ほとんどのPDFがA4サイズ以下なので)
    • インチサイズに変換して、297÷25.4=11.69291338582677インチ。
    • Retinaディスプレイの由来から300dpiの解像度があれば十分なので、11.69291338582677×300=3507.874015748031≒3508ピクセル。
  • 以上の計算から、サイズ調整:100%、最大:3508ピクセルに設定しておけば、A4サイズまでの環境なら300dpiがキープできることになるのだ。
イメージのサンプリング >> 解像度で指定する
  • 気になる項目は「解像度」である。これを設定すると、xmlキーは「ImageResolution」となる。
  • 元の Reduse File Size の設定にはない項目である。(上記のピクセル指定で設定されているので)
  • いろいろ試してみると、実は300dpiの解像度が欲しいのであれば、「解像度:300ピクセル/インチ」と指定するだけでOKだった。
  • 但し、解像度を指定する場合は、その他の項目はすべて0にしておく必要がある。(0にすると空欄となる)

f:id:zariganitosh:20130312155119p:image:w450

  • ピクセル指定のような面倒な計算は不要だったのである。
イメージの圧縮 >> 品質
  • JPEG品質によって、ファイルサイズと画像品質にどのような影響があるか調べてみた。
品質サイズ画像
元画像32.6MB目視でJPEG品質+1と同じ
+1(最大)21.6MB(元画像の2/3)f:id:zariganitosh:20130312162650p:image:w450
02.2MB(元画像の1/15)f:id:zariganitosh:20130312162651p:image:w450
-0.21.6MB(元画像の1/20)目視でJPEG品質0と同じ
-1(最小)900KB(元画像の1/36)f:id:zariganitosh:20130312163833p:image:w450
  • 元画像とJPEG品質+1(最大)の差は、目視では判別できないレベルだった。(容量の無駄なので元画像はなし)
  • JPEG品質0は、目視でブロックノイズが若干確認できるのだが、拡大しないと気付かないレベル。
    • このページでは1/2縮小表示しているので、ほとんど気付けないレベルになってしまっている。(クリックして原画を見ると若干のブロックノイズあり)
  • JPEG品質-0.2は、JPEG品質0とほとんど同じ。
  • JPEG品質-1は、ブロックノイズが明確に確認できる。
    • 但し、画像の美しさを追求しなければ、この品質でも十分かもしれない。
    • 解像度は300dpiあるので、小さな文字でもちゃんと判読できる。

以上の結果から...

  • 解像度は300dpi。(Retina環境を考慮して)
  • 品質重視なら、JPEG品質=-0.2。
  • 圧縮重視なら、JPEG品質=-1。

f:id:zariganitosh:20130312173208p:image:w450

品質重視のこの設定でしばらく使ってみる!(1/20)


イメージのサンプリング >> 品質について

  • この項目のxmlのキーは、ImageScaleInterpolate(イメージ補完?)となっている。
  • システムデフォルトの設定では、<true />・<false />となっているのだけど、
  • ColorSyncユーティリティでは、高・中・低を選択して、<integer>1・2・3</integer>が書き込まれる。
  • 果たしてどちらの設定が正しいのか不明だが、どのような値を設定しても画像サイズ・品質とも違いはなかった。
    • (別の特定の条件で何らかの影響を与えるのかもしれないが)

とおりすがりとおりすがり 2015/07/22 13:37 Mac OS X Yosemite 10.10.4では
/Library/Filters/
ではなく、
/System/Library/Filters/
でした。
環境によって違うのかも、ですが、参考まで(Macは素人です。)

記事に助けられました。ありがとうございました。

zariganitoshzariganitosh 2015/07/22 14:07 OSX標準では/Library/Filters/は存在しないのですが、自分で新規追加して、そこに独自のフィルター定義ファイルを追加しています。

UNIX系のOSには、およそ3つのLibrary領域が存在します。
・/System/Library/は、OS固有の設定が保存される領域(特別な理由がない限りユーザーが変更しない方が良い領域)、
・/Library/は、すべてのログインユーザーに影響する設定を保存する領域、
・/Users/zari/Library/は、zariユーザー固有の設定を保存する領域(他のユーザーには影響しない領域)、

/System/以下は、OS固有のファイル群なので通常は触らない方が良いです。
本当はzariユーザーだけのフィルターにしようと思ったのですが、プレビュー.appは/Users/zari/Library/Filters/を認識してくれなかったので、/Library/Filters/にフィルター設定を追加しました。

払う払う 2016/07/03 14:32 参考になりました.
ありがとうございます.

プレビューから直接フィルター処理出来ると楽ですが,
Color syncユーティリティから対象のファイルを直接開く方法もあるようです.
https://discussions.apple.com/thread/3196406?start=0

ご存知かもしれませんが参考まで.

zariganitoshzariganitosh 2016/07/04 06:25 コメントありがとうございます!
Color syncユーティリティを使うと、フィルタ適用前に変化を確認できるところがいいですね。
素晴らしい情報をありがとうございます!

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/zariganitosh/20130312/my_pdf_quartz_filter
リンク元