色付きのコマンドの結果などから html に変換してくれる aha というコマンドを少し試してみました.
タグ: convert
国立国会図書館デジタルコレクションの蔵書の画像の余白を削除して読みやすくする
国立国会図書館デジタルコレクションの蔵書をダウンロードしてローカルで読む際余白が邪魔なので消しました.
ImageMagickでpdfファイルの1ページ目だけをjpegにする
ImagemMgickのconvertコマンドでpdfをjpegにしようとするとエラーになってしまいました.でもこれは見覚えのあるエラー……どこかにメモした気がするのですが見当たらないのでblogにしてみました.
ImageMagickのセキュリティポリシーを変更してpdfファイルを変換できるようにする
$ convert -geometry 640 /var/tmp/Nextcloud2pdf_cache/HQeSTL5TgcgAPtS.pdf[0] /tmp/HQeSTL5TgcgAPtS.jpg
convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
convert-im6.q16: no images defined `/tmp/HQeSTL5TgcgAPtS.jpg' @ error/convert.c/ConvertImageCommand/3258.
セキュリティの問題でImageMagickの設定で無効にしてあるのでこれを有効にします.
$ sudo git -C /etc diff /etc/ImageMagick-6/policy.xml
diff --git a/ImageMagick-6/policy.xml b/ImageMagick-6/policy.xml
index 82a3d0b..0953557 100644
--- a/ImageMagick-6/policy.xml
+++ b/ImageMagick-6/policy.xml
@@ -91,6 +91,6 @@
<policy domain="coder" rights="none" pattern="PS2" />
<policy domain="coder" rights="none" pattern="PS3" />
<policy domain="coder" rights="none" pattern="EPS" />
- <policy domain="coder" rights="none" pattern="PDF" />
+ <policy domain="coder" rights="read|write" pattern="PDF" />
<policy domain="coder" rights="none" pattern="XPS" />
</policymap>
設定を編集後実行するとうまく動きました :)
$ convert -geometry 640 /var/tmp/Nextcloud2pdf_cache/HQeSTL5TgcgAPtS.pdf[0] /tmp/HQeSTL5TgcgAPtS.jpg
pdfファイルの指定ページだけを変換する
ソースファイル名を普通に指定すると, ファイル名-%d.jpg
のようなファイルが連番で作成されます.
今回は1ページめだけが欲しいので不必要なファイルがたくさん出来てしまいます.
1ページだけが欲しい場合, ソースファイル名.pdf[0]
というようにページ指定して実現できます.この添字は1ページ目が0,2ページめが1のように指定します.
存在しないページ番号を指定するとエラーになります.
$ convert -geometry 640 /var/tmp/Nextcloud2pdf_cache/HQeSTL5TgcgAPtS.pdf[99] /tmp/HQeSTL5TgcgAPtS-99.jpg
Requested FirstPage is greater than the number of pages in the file: 33
No pages will be processed (FirstPage > LastPage).
convert-im6.q16: no images defined `./HQeSTL5TgcgAPtS-1.jpg' @ error/convert.c/ConvertImageCommand/3258.
$ dpkg-query -W imagemagick
imagemagick 8:6.9.10.23+dfsg-2.1+deb10u1
$ lsb_release -dr
Description: Debian GNU/Linux 10 (buster)
Release: 10
$ uname -m
x86_64
ドイツの格安VPS(Contabo VPS 300) を借りてセットアップ済サーバのOSを入れ替える
追記)Contabo のアフェリエイトリンクを貼っておきます.Contabo のサービスを申し込む場合は以下のバナーから申し込んでくれると嬉しいです.
今利用しているさくらのVPSのdiskがいっぱいになってしまいました.現在100GBですが,鹿児島市の航空写真のH30版を入手したのでもう50GBは欲しい.できればもう100GB.
オブジェクトストレージだとそこそこ安そうだけどさくらは申込み停止中.
新規お申し込み停止のお知らせ
100GiB以下 540円
ConoHaは受付中みたい.
容量は100GB単位で追加でき、月額450円/100GBでご利用いただけます。
Amazon S3 はどうだろうと計算すると今の転送量だと4000円/月以上しそう(◞‸◟)
海外だとどうだろうと VPS 比較サイトの VPS Comp を見ると,ドイツの Contabo VPS 300 というストレージ 300GB のサービスが 3.99€/月と格安です.日本円で500円位でしょうか.
安いのでちょっと不安ですが契約してみました.セットアップ料金として別途 4.99€が必要でした.このフィーは申込期間が1ヶ月の場合で,3ヶ月,6ヶ月と伸びるごとに安くなって12ヶ月で無料になります.
契約には別途ライセンスの写真を送る必要がありました.日本語の住基ネットカードの表面のみの写真を送りましたが受け付けてもらえました.
するとすぐにアクセスのための情報がやってきました.アクセス手段はssh と VNC です.
申込時に指定したディストリビューションでセットアップ済ですが,自分で用意したイメージでセットアップしたり暗号化FSなども利用したいです.
さくらのVPS では自分で用意した ISO イメージでセットアップできました.
しかし,Contabo ではこの方法は使えないようです.
Webのコントロールパネルを見ると,Rescue system から SystemRescueCD, Debian Live, CroneZilla が使えるようです.
今回は,ディスクに空き領域を作成してそこに起動イメージとセットアップCD イメージを置いてセットアップ済イメージのGRUB からそれを起動してセットアップすることにしました.
(はじめ / の領域に置いて初期化しなければ行けるのではと試しましたがパーティションの設定で d-i に怒られたので別パーティションに)
ということでまずはWebコンソールから Debian Live で起動して,VNC で接続して Install 済のイメージをいじって500MB ほどの空きパーティションを作成しました. /
が1GB ほどあったのでこれをおおまかに半分に分割しました.ext4 でフォーマットもして mount します.
(案外VNCももたつかず操作できた)
mount した領域に vmlinux, initrd, Debian Install CD を入れます.
今回はこの辺をダウンロードしました.
http://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/debian-testing-amd64-netinst.iso http://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/SHA512SUMS http://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/SHA512SUMS.sign http://http.us.debian.org/debian/dists/buster/main/installer-amd64/20190410/images/hd-media/vmlinuz http://http.us.debian.org/debian/dists/buster/main/installer-amd64/20190410/images/hd-media/initrd.gz
再起動してプリインストールイメージの GRUB で c
を押して GRUB の command-line に入ります.
そしてこんな感じでさっきダウンロードしたイメージで起動します.
grub> imsmod part_msdos grub> insmod ext2 grub> set root='hd0,msdos2' grub> linux /vmlinux grub> initrd /initrd.gz grub> boot
うまく起動すれば後はいつもの d-i なのでよしなに…….セットアップが終わったらもったいないのでパーティションを操作してセットアップに使った領域をくっつけておきます.
UnixBench 測ってみました.500円にしては案外性能いいような.#自宅サーバ(HP ProLiant MicroServer)は 400前後なのに……
Benchmark Run: Sun May 12 2019 22:42:16 - 23:10:29 2 CPUs in system; running 2 parallel copies of tests Dhrystone 2 using register variables 56736299.4 lps (10.0 s, 7 samples) Double-Precision Whetstone 9687.1 MWIPS (9.2 s, 7 samples) Execl Throughput 5257.7 lps (29.7 s, 2 samples) File Copy 1024 bufsize 2000 maxblocks 859332.6 KBps (30.0 s, 2 samples) File Copy 256 bufsize 500 maxblocks 245855.2 KBps (30.0 s, 2 samples) File Copy 4096 bufsize 8000 maxblocks 2105320.9 KBps (30.0 s, 2 samples) Pipe Throughput 1607890.0 lps (10.0 s, 7 samples) Pipe-based Context Switching 342078.2 lps (10.0 s, 7 samples) Process Creation 11453.5 lps (30.0 s, 2 samples) Shell Scripts (1 concurrent) 9834.5 lpm (60.0 s, 2 samples) Shell Scripts (8 concurrent) 1400.3 lpm (60.1 s, 2 samples) System Call Overhead 1160557.8 lps (10.0 s, 7 samples) System Benchmarks Index Values BASELINE RESULT INDEX Dhrystone 2 using register variables 116700.0 56736299.4 4861.7 Double-Precision Whetstone 55.0 9687.1 1761.3 Execl Throughput 43.0 5257.7 1222.7 File Copy 1024 bufsize 2000 maxblocks 3960.0 859332.6 2170.0 File Copy 256 bufsize 500 maxblocks 1655.0 245855.2 1485.5 File Copy 4096 bufsize 8000 maxblocks 5800.0 2105320.9 3629.9 Pipe Throughput 12440.0 1607890.0 1292.5 Pipe-based Context Switching 4000.0 342078.2 855.2 Process Creation 126.0 11453.5 909.0 Shell Scripts (1 concurrent) 42.4 9834.5 2319.5 Shell Scripts (8 concurrent) 6.0 1400.3 2333.9 System Call Overhead 15000.0 1160557.8 773.7 ======== System Benchmarks Index Score 1682.8
回線速度も測ってみましたが流石に遅いですね.
$ speedtest-cli --list|head -6|tail -5|cut -d\) -f1|xargs -I{} -n1 speedtest-cli --server {} |egrep '^Hosted|^Download:|Upload:' Hosted by noris network AG (Nuremberg) [6.35 km]: 15.333 ms Download: 98.64 Mbit/s Upload: 4.02 Mbit/s Hosted by 10G-Server.com (Nuremberg) [7.56 km]: 9.801 ms Download: 98.59 Mbit/s Upload: 4.04 Mbit/s Hosted by Contabo GmbH (Nuremberg) [7.56 km]: 0.764 ms Download: 99.14 Mbit/s Upload: 4.04 Mbit/s Hosted by Maltechx.de (Nuremberg) [7.56 km]: 8.903 ms Download: 98.27 Mbit/s Upload: 4.04 Mbit/s Hosted by TempleServers (Nuremberg) [7.56 km]: 11.996 ms Download: 98.20 Mbit/s Upload: 4.08 Mbit/s
$ speedtest-cli --list|grep -i tokyo|cut -d\) -f1|xargs -I{} -n1 speedtest-cli --server {} |egrep '^Hosted|^Download:|Upload:' Hosted by OPEN Project (via 20G SINET) (Tokyo) [9281.34 km]: 259.654 ms Download: 57.46 Mbit/s Upload: 3.67 Mbit/s Hosted by GLBB Japan (Tokyo) [9281.34 km]: 314.77 ms Download: 40.50 Mbit/s Upload: 3.72 Mbit/s Hosted by i3D.net (Tokyo) [9281.34 km]: 811.767 ms Download: 48.99 Mbit/s Upload: 3.71 Mbit/s Hosted by GIAM PING VIETPN.COM (Tokyo) [9281.34 km]: 309.393 ms Download: 45.06 Mbit/s Upload: 3.62 Mbit/s Hosted by Rakuten Mobile , Inc (Tokyo) [9281.34 km]: 236.677 ms Download: 61.32 Mbit/s Upload: 2.45 Mbit/s Hosted by Love4Taylor (Tokyo) [9281.34 km]: 263.325 ms Download: 59.33 Mbit/s Upload: 3.68 Mbit/s
暫く運用して問題無さそうなら国内のサーバを1つ閉じてこちらと役割分担する感じにしようと思います.
pdfファイルから画像を抜き出し( pdfimages or LibreOffice )
poppler-utilsのpdfimagesを使う
$ apt show poppler-utils | grep Description: -A99 WARNING: apt does not have a stable CLI interface. Use with caution in scripts. Description: PDF 向けユーティリティ (Poppler ベース) Poppler は xpdf PDF ビューアを基に作られた PDF 描画ライブラリです。 . 本パッケージには (Poppler ベースの) コマンドラインユーティリティが含まれ、 PDF 文書の情報の取得、他の形式への変換、編集ができます。 * pdfdetach -- 埋め込みファイル (添付ファイル) の一覧出力または抽出 * pdffonts -- フォント分析ツール * pdfimages -- 画像抽出ツール * pdfinfo -- 文書情報 * pdfseparate -- ページ抽出ツール * pdfsig -- デジタル署名の検証 * pdftocairo -- PDF から PNG/JPEG/PDF/PS/EPS/SVG への Cairo を使った変換ツール * pdftohtml -- PDF から HTML への変換ツール * pdftoppm -- PDF から PPM/PNG/JPEG 画像への変換ツール * pdftops -- PDF から PostScript (PS) への変換ツール * pdftotext -- テキストの抽出 * pdfunite -- 文書の併合ツール
$ sudo apt install poppler-utils
$ pdfimages pdfimages version 0.69.0 Copyright 2005-2018 The Poppler Developers - http://poppler.freedesktop.org Copyright 1996-2011 Glyph & Cog, LLC Usage: pdfimages [options] <PDF-file> <image-root> -f <int> : first page to convert -l <int> : last page to convert -png : change the default output format to PNG -tiff : change the default output format to TIFF -j : write JPEG images as JPEG files -jp2 : write JPEG2000 images as JP2 files -jbig2 : write JBIG2 images as JBIG2 files -ccitt : write CCITT images as CCITT files -all : equivalent to -png -tiff -j -jp2 -jbig2 -ccitt -list : print list of images instead of saving -opw <string> : owner password (for encrypted files) -upw <string> : user password (for encrypted files) -p : include page numbers in output file names -q : don't print any messages or errors -v : print copyright and version info -h : print usage information -help : print usage information --help : print usage information -? : print usage information
$ pdfimages ./bicycle_parking.pdf -list page num type width height color comp bpc enc interp object ID x-ppi y-ppi size ratio -------------------------------------------------------------------------------------------- 1 0 image 340 120 rgb 3 8 image no 5 0 221 221 9576B 7.8% 1 1 image 960 720 rgb 3 8 jpeg yes 14 0 170 170 64.2K 3.2%
$ pdfimages ./bicycle_parking.pdf ./bicycle_parking-images $ ls -l ./bicycle_parking-images* -rw-r--r-- 1 matoken matoken 122415 11月 12 21:40 ./bicycle_parking-images-000.ppm -rw-r--r-- 1 matoken matoken 2073615 11月 12 21:40 ./bicycle_parking-images-001.ppm $ identify ./bicycle_parking-images-000.ppm ./bicycle_parking-images-000.ppm PPM 340x120 340x120+0+0 8-bit sRGB 122415B 0.000u 0:00.000
$ pdfimages ./bicycle_parking.pdf ./bicycle_parking-images -png $ ls -l ./bicycle_parking-images* -rw-r--r-- 1 matoken matoken 10274 11月 12 21:46 ./bicycle_parking-images-000.png -rw-r--r-- 1 matoken matoken 321115 11月 12 21:46 ./bicycle_parking-images-001.png $ identify ./bicycle_parking-images-000.png ./bicycle_parking-images-000.png PNG 340x120 340x120+0+0 8-bit sRGB 10274B 0.000u 0:00.000
$ pdfimages ./bicycle_parking.pdf ./bicycle_parking-images -j $ ls -l ./bicycle_parking-images* -rw-r--r-- 1 matoken matoken 122415 11月 12 21:48 ./bicycle_parking-images-000.ppm -rw-r--r-- 1 matoken matoken 65695 11月 12 21:48 ./bicycle_parking-images-001.jpg
LibreOfficeでOpenDocumentFormatに変換して画像だけ抜き出し
OpenDocumentFormatはzip形式で圧縮されてその中に画像ファイルも含まれるのでDraw形式に変換して画像ディレクトリの格納されている Pictures
だけ展開すると画像が取り出せる.
導入はディストリビューションのほかFlatpack, snapなども公式で配布されているのでお好みで.今回は Debian sid amd64 でapt installしたもの.
$ libreoffice --headless --nologo --nofirststartwizard --convert-to odg ./bicycle_parking.pdf convert /home/matoken/Downloads/bicycle_parking.pdf -> /home/matoken/Downloads/bicycle_parking.odg using filter : draw8 $ unzip ./bicycle_parking.odg Pictures/* Archive: ./bicycle_parking.odg extracting: Pictures/10000000000003C0000002D0136E1A08DF8E2B28.jpg extracting: Pictures/100000000000015400000078BA7345C344D8D008.png $ ls -lA Pictures/ 合計 80 -rw-r--r-- 1 matoken matoken 10812 11月 12 12:56 100000000000015400000078BA7345C344D8D008.png -rw-r--r-- 1 matoken matoken 65695 11月 12 12:56 10000000000003C0000002D0136E1A08DF8E2B28.jpg $ identify Pictures/* Pictures/100000000000015400000078BA7345C344D8D008.png PNG 340x120 340x120+0+0 8-bit sRGB 10812B 0.000u 0:00.000 Pictures/10000000000003C0000002D0136E1A08DF8E2B28.jpg JPEG 960x720 960x720+0+0 8-bit sRGB 65695B 0.000u 0:00.000
環境
$ dpkg-query -W poppler-utils unzip libreoffice imagemagick imagemagick 8:6.9.10.14+dfsg-7 libreoffice 1:6.1.3-1 poppler-utils 0.69.0-2 unzip 6.0-21 $ lsb_release -d Description: Debian GNU/Linux unstable (sid) $ uname -m x86_64