Sunday, February 21, 2010

Зургийн файлыг PDF рүү хөрвүүлэн нэгтгэх нь

Төслийн эхлэл болоод төгсгөл шатанд хэн хүнгүй бичиг баримттай зууралдах хэрэгцээ нэлээдгүй гардаг. Шивээд нэг файлд эмхэтгэдэг word, excel мэтийн баримтууд бол яах вэ, асуудал алга. Аа харин тодорхой дэс дараа бүхий сканнердсан цаас, эсхүл зураг хөрөг мэт нь багагүй арчилгаа шаарддаг. Жаахан хайнга хандсан үед хөл толгой нь үл мэдэх зунгаарсан садаа болж хувирах нь ч бий.

Жишээлбэл надад тамгалаад, батлачихсан гэрээ(8 хуудас) байлаа гэж саная. Хуудас хуудсаар нь сканнердаад, 8 ширхэг зураг болгочихно. Дараа нь энэ бүгдээ Trac, Redmine зэрэг хамтын ажиллагаа, төслийн удирдлагын талбарт хуулна. 8 удаа browse товч дарахад хамаа алга гэхэд түүнийг үзэх, ашиглах хүнд баахан төвөгтэй. Болдог бол бүгдийг нь базаад нэг PDF файл болгочихмоор. Хуулахад ч, үзэхэд ч, маллахад ч амар. Тэгвэл яаж үүнийг хийх вэ?

Танд imagemagick[1] тус болно. За ингээд, алхам алхмаар хамтдаа хийж үзье. Танд дараахь зургийн файлууд байгаа гэж саная:

$ ls -lh
total 19M
-rwxr-xr-x 1 battur battur 2.7M 2010-02-21 19:24 DSC_0801.JPG
-rwxr-xr-x 1 battur battur 2.6M 2010-02-21 19:24 DSC_0802.JPG
-rwxr-xr-x 1 battur battur 2.6M 2010-02-21 19:24 DSC_0803.JPG
-rwxr-xr-x 1 battur battur 2.0M 2010-02-21 19:24 DSC_0804.JPG
-rwxr-xr-x 1 battur battur 2.0M 2010-02-21 19:24 DSC_0805.JPG
-rwxr-xr-x 1 battur battur 2.4M 2010-02-21 19:24 DSC_0806.JPG
-rwxr-xr-x 1 battur battur 2.2M 2010-02-21 19:24 DSC_0807.JPG
-rwxr-xr-x 1 battur battur 2.2M 2010-02-21 19:24 DSC_0808.JPG

Ер нь бол нэг нь л дор хаяад 3 мега байт(3008x2000) хүртэл хэмжээтэй гэвэл эднийг тэр чигт нь PDF болговол веб рүү хуулж барахгүй нүсэр том хэмжээтэй болох байх. Ийм учраас юуны түрүүнд бүх зургаа 1200 пикселийн өргөнтэй болгож хэмжээг нь багасгая(өндөр нь дагаад багасна):

$ mogrify -resize 1200 *.JPG
$ ls -lh
total 1.3M
-rw-r--r-- 1 battur battur 198K 2010-02-21 19:25 DSC_0801.JPG
-rw-r--r-- 1 battur battur 199K 2010-02-21 19:25 DSC_0802.JPG
-rw-r--r-- 1 battur battur 188K 2010-02-21 19:25 DSC_0803.JPG
-rw-r--r-- 1 battur battur 126K 2010-02-21 19:25 DSC_0804.JPG
-rw-r--r-- 1 battur battur 127K 2010-02-21 19:25 DSC_0805.JPG
-rw-r--r-- 1 battur battur 166K 2010-02-21 19:25 DSC_0806.JPG
-rw-r--r-- 1 battur battur 144K 2010-02-21 19:25 DSC_0807.JPG
-rw-r--r-- 1 battur battur 142K 2010-02-21 19:25 DSC_0808.JPG

Үүний дараагаар багассан зургуудаа нэг PDF файлд нэгтгэе:

$ convert *.JPG 201002_Geree_XYZCompany.pdf
Segmentation fault

Уул нь дээрх тушаал байхад л хангалттай боловч миний машин алдаа өгөөд явсангүй. Нэг дор олон файл хөрвүүлж дийлэхгүйгээс бус ганц ганцаар нь бол чадаад байна.

$ ls | grep JPG | while read name; do \
convert $name ${name/JPG}PDF; done; ls -lh
total 2.6M
-rw-r--r-- 1 battur battur 198K 2010-02-21 19:25 DSC_0801.JPG
-rw-r--r-- 1 battur battur 202K 2010-02-21 19:27 DSC_0801.PDF
-rw-r--r-- 1 battur battur 199K 2010-02-21 19:25 DSC_0802.JPG
-rw-r--r-- 1 battur battur 204K 2010-02-21 19:27 DSC_0802.PDF
-rw-r--r-- 1 battur battur 188K 2010-02-21 19:25 DSC_0803.JPG
-rw-r--r-- 1 battur battur 193K 2010-02-21 19:27 DSC_0803.PDF
-rw-r--r-- 1 battur battur 126K 2010-02-21 19:25 DSC_0804.JPG
-rw-r--r-- 1 battur battur 130K 2010-02-21 19:27 DSC_0804.PDF
-rw-r--r-- 1 battur battur 127K 2010-02-21 19:25 DSC_0805.JPG
-rw-r--r-- 1 battur battur 130K 2010-02-21 19:27 DSC_0805.PDF
-rw-r--r-- 1 battur battur 166K 2010-02-21 19:25 DSC_0806.JPG
-rw-r--r-- 1 battur battur 170K 2010-02-21 19:27 DSC_0806.PDF
-rw-r--r-- 1 battur battur 144K 2010-02-21 19:25 DSC_0807.JPG
-rw-r--r-- 1 battur battur 148K 2010-02-21 19:27 DSC_0807.PDF
-rw-r--r-- 1 battur battur 142K 2010-02-21 19:25 DSC_0808.JPG
-rw-r--r-- 1 battur battur 146K 2010-02-21 19:27 DSC_0808.PDF

Тэгвэл олон PDF файлыг нэгтгэчихдэг програм бий болов уу? Хайлаа... Байна! GhostScript[2] :) Нэгтгэе:

$gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=201002_Geree_XYZCompany.pdf -dBATCH *.PDF && ls -lh
GPL Ghostscript 8.70 (2009-07-31)
Copyright (C) 2009 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 1.
Page 1
Processing pages 1 through 1.
Page 1
Processing pages 1 through 1.
Page 1
Processing pages 1 through 1.
Page 1
Processing pages 1 through 1.
Page 1
Processing pages 1 through 1.
Page 1
Processing pages 1 through 1.
Page 1
Processing pages 1 through 1.
Page 1
total 2.9M
-rw-r--r-- 1 battur battur 289K 2010-02-21 19:28 201002_Geree_XYZCompany.pdf
-rw-r--r-- 1 battur battur 198K 2010-02-21 19:25 DSC_0801.JPG
-rw-r--r-- 1 battur battur 202K 2010-02-21 19:27 DSC_0801.PDF
-rw-r--r-- 1 battur battur 199K 2010-02-21 19:25 DSC_0802.JPG
-rw-r--r-- 1 battur battur 204K 2010-02-21 19:27 DSC_0802.PDF
-rw-r--r-- 1 battur battur 188K 2010-02-21 19:25 DSC_0803.JPG
-rw-r--r-- 1 battur battur 193K 2010-02-21 19:27 DSC_0803.PDF
-rw-r--r-- 1 battur battur 126K 2010-02-21 19:25 DSC_0804.JPG
-rw-r--r-- 1 battur battur 130K 2010-02-21 19:27 DSC_0804.PDF
-rw-r--r-- 1 battur battur 127K 2010-02-21 19:25 DSC_0805.JPG
-rw-r--r-- 1 battur battur 130K 2010-02-21 19:27 DSC_0805.PDF
-rw-r--r-- 1 battur battur 166K 2010-02-21 19:25 DSC_0806.JPG
-rw-r--r-- 1 battur battur 170K 2010-02-21 19:27 DSC_0806.PDF
-rw-r--r-- 1 battur battur 144K 2010-02-21 19:25 DSC_0807.JPG
-rw-r--r-- 1 battur battur 148K 2010-02-21 19:27 DSC_0807.PDF
-rw-r--r-- 1 battur battur 142K 2010-02-21 19:25 DSC_0808.JPG
-rw-r--r-- 1 battur battur 146K 2010-02-21 19:27 DSC_0808.PDF

Ингээд л боллоо до. Одоо ч хуулаад, хуваалцаад байна бид дэ хө ;)
Хэрэггүй гэж үзвэл зургаа мөн ганц хуудастай PDF файлуудаа устгана биз ээ.

Дүгнэлт:
  • Линукст хар мянган гоё програм бий.
  • Линуксчид "дугуй"-г дахин нээж цагаа үрдэггүй.
  • Линукс бол бүтээмжит хүний хөлөглөх унаа.

Тайлбар:

[1] ImageMagick® is a software suite to create, edit, and compose bitmap images. It can read, convert and write images in a variety of formats (over 100) including DPX, EXR, GIF, JPEG, JPEG-2000, PDF, PhotoCD, PNG, Postscript, SVG, and TIFF. Use ImageMagick to translate, flip, mirror, rotate, scale, shear and transform images, adjust image colors, apply various special effects, or draw text, lines, polygons, ellipses and Bézier curves.

The functionality of ImageMagick is typically utilized from the command line or you can use the features from programs written in your favorite programming language. Choose from these interfaces: G2F (Ada), MagickCore (C), MagickWand (C), ChMagick (Ch), ImageMagickObject (COM+), Magick++ (C++), JMagick (Java), L-Magick (Lisp), NMagick (Neko/haXe), MagickNet (.NET), PascalMagick (Pascal), PerlMagick (Perl), MagickWand for PHP (PHP), IMagick (PHP), PythonMagick (Python), RMagick (Ruby), or TclMagick (Tcl/TK). With a language interface, use ImageMagick to modify or create images dynamically and automagically.

ImageMagick is free software delivered as a ready-to-run binary distribution or as source code that you may freely use, copy, modify, and distribute. Its license is compatible with the GPL. It runs on all major operating systems. Эх сурвалж: http://www.imagemagick.org/

[2] Ghostscript is a suite of software based on an interpreter for Adobe Systems' PostScript and Portable Document Format (PDF) page description languages. Эх сурвалж: Википедиа.

6 comments:

Battur Sanchin said...

Ер нь бол зургийн хэмжээг багасгахгүйгээр хөрвүүлсэн ч болохоор юм байна. PDF рүү хөрвүүлэх явцдаа хангалттай багасгачихдаг шиг байна шүү ;)

Battur Sanchin said...

Мөн олон файлыг нэг дор хөрвүүлэхэд гарсан алдааны шалтгааныг тодруулсан хүн байна уу? ;)

Ochko said...

Хэрэгтэй зүйл бичжээ. Энэ командуудыг эвлүүлээд зургуудыг pdf болгодог скрипт бичвэл. Тэгээд github дээрээ тавьчуул... ;)

Battur Sanchin said...

@Маахай Л.Очирхуяг
Баярлалаа, нээрэн тэгье ;)

Галаа said...

Их хэрэгтэй зүйл бичсэн байна.
Чамайг скриптээ биччихвэл нэг товч дараад л ашиглаад баймаар байна6

redhorned said...

Ашиглаж үзлээ болж байна, баярлалаа хэрэг боллоо =).