I understand that it may be possible using imageMagicks:
convert image.mng out.pdf
however is there a gimp way of doing this?
I also saw this script/plugin which uses
convert
:https://www.dropbox.com/s/jzdkgv2f0jrbw6i/export-layers-to-pdf.py?dl=0
#!/usr/bin/env python # # Author: helour # Copyright: 2013-2015 helour # Based on the cr33dog's script Export Layers as PNG (http://registry.gimp.org/node/18440) # License: GPL v3+ # # Version: 0.7 # # GIMP plugin to export layers as a multiple pages PDF file # # # Note for Windows users: # # You need add the ImageMagic directory (which consists the 'convert.exe' executable file) # to the GIMP environment PATH variable into the file: # C:\Program Files\GIMP 2\lib\gimp\2.0\environ\default.env # # like in the example here: # PATH=${gimp_installation_dir}\bin;${gimp_installation_dir}\32\bin;C:\Program Files\ImageMagick-6.9.1-Q16 # PYTHONPATH=${gimp_installation_dir}\32\lib\gimp\2.0\python import os import gtk from subprocess import check_call from tempfile import mkstemp from gimpfu import * def mktmpfile(suffix): fd, filename = mkstemp(suffix=suffix) fptr = os.fdopen(fd) return filename def get_layers_to_export(layers, only_visible, gimp_version): result = [] for layer in layers: if gimp_version >= 2.8 and pdb.gimp_item_is_group(layer): result += get_layers_to_export(layer.children, only_visible, gimp_version) else: if only_visible: if layer.visible: result.append(layer) else: result.append(layer) return result def combine_images_into_pdf(img_files, pdf_file): try: # Run on shell because of conflict with windows system command 'convert.exe' check_call(['convert'] + img_files + [pdf_file], shell = True if os.name == 'nt' else False) except Exception as e: pdb.gimp_message("Error while executing 'convert' command:\n" + str(e) + "\n\nHave you installed the ImageMagic package\nand/or\nset the GIMP environment PATH variable?") def export_layers(image, only_visible, quality): if not image.filename: pdb.gimp_message("Please save your file first!") return chooser = gtk.FileChooserDialog(title = None, action = gtk.FILE_CHOOSER_ACTION_SAVE, buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK)) chooser.set_current_folder(os.path.dirname(image.filename)) chooser.set_current_name(os.path.splitext(image.filename)[0] + '.pdf') if chooser.run() != gtk.RESPONSE_OK: return filename = chooser.get_filename() chooser.destroy() version = gimp.version[0:2] gimp_version = float(version[0]) + float(version[1]) / 10.0 layers_to_export = get_layers_to_export(image.layers, only_visible, gimp_version) img_files = [] try: for layer in layers_to_export: ext = '.jpg' if quality < 100 else '.png' fullpath = mktmpfile(ext) img_files.append(fullpath) pic_filename = os.path.basename(fullpath) if quality < 100: pdb.file_jpeg_save(image, layer, fullpath, pic_filename, quality / 100.0, 0, 1, 0, "", 0, 1, 0, 2) else: pdb.file_png_save(image, layer, fullpath, pic_filename, 0, 9, 1, 1, 1, 1, 1) combine_images_into_pdf(img_files, filename) finally: for img in img_files: try: os.remove(img) except: pass register( "export-layers-to-pdf", #name "Export layers to a multiple pages PDF file", #description "Export all layers to a single multiple pages PDF file", #help "helour", #author "helour", #copyright "2015", #year "Export layers to PDF", #menu label "*", # image format [ #input args. Format (type, name, description, default [, extra]) (PF_IMAGE, "image", "Image", None), (PF_BOOL, "only_visible", "Only Visible Layers?", True), (PF_SLIDER, "quality", "Image quality", 100, (10, 100, 1)), ], [], #results. Format (type, name, description) export_layers, #callback menu=("<Image>/File/Export/"), ) main()
However, I am not seeing a
/Applications/GIMP.app/Contents/Resources/share/gimp/2.0/plug-ins
folder, so i made one and put the python script inside of it as well as ranchmod +x
on the script.I also saw something in the python-fu browser, but have no idea how to use it:
“images” is undefined:
Gimp 2.8.14 Mac osx
I also followed some advice to look in
/Library
but didn’t find anything:➜ /Library sudo find . | grep -i gimp Password: ./Caches/Homebrew/brew-cask--git/Casks/gimp.rb ./Caches/Homebrew/brew-cask--git/Casks/lisanet-gimp.rb ./Caches/Homebrew/Formula/gimp.brewing
Is there anyway to easily install plugins that I am missing here?
update
With the help of @tmanni in irc i was able to find the script path
/Applications/GIMP.app/Contents/Resources/lib/gimp/2.0/plug-ins
inside preferences > plug-ins:However, the plugin would exit saying
convert
is not installed.I then tried to add
/usr/local/bin
to the Plug-Ins path in the menu but it then crashes with an exit code status of -5.I then tried to directly
ln -s /usr/local/bin/convert /Applications/GIMP.app/Contents/Resources/bin/convert
but no dice there either.
Answer
After spending the better part of a week fiddling around with this:
➜ gimp_export_layers_to_pdf git:(master) brew --config
HOMEBREW_VERSION: 0.9.5
ORIGIN: https://github.com/Homebrew/homebrew
HEAD: b51d0bc7f7b3575227538f84151b3fa4318f2774
Last commit: 42 minutes ago
HOMEBREW_PREFIX: /usr/local
HOMEBREW_REPOSITORY: /usr/local
HOMEBREW_CELLAR: /usr/local/Cellar
HOMEBREW_BOTTLE_DOMAIN: https://homebrew.bintray.com
CPU: 8-core 64-bit haswell
OS X: 10.10.5-x86_64
Xcode: 7.1.1
CLT: 7.1.0.0.1.1444952191
Clang: 7.0 build 700
X11: N/A
System Ruby: 2.0.0-p481
Perl: /usr/bin/perl
Python: /usr/local/bin/python => /usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/bin/python2.7
Ruby: /usr/bin/ruby => /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby
Java: 1.6.0_65-b14-468
Solution:
I opened a git repo for this script, I was a bit surprised about how difficult the plugin registry for gimp was, however I got it to a point where it will work if the pdf is exported with a quality less than 100:
The longer story:
Basically what was happening was gimp was using the default libraries that are included with gimp (sounds like a good idea) until I open gimp from terminal:
➜ ~ /Applications/GIMP.app/Contents/MacOS/GIMP ~/Desktop/Export_These_Layers.xcf
...
dyld: Library not loaded: /usr/local/lib/libfreetype.6.dylib
Referenced from: /usr/local/bin/convert
Reason: Incompatible library version: convert requires version 19.0.0 or later, but libfreetype.6.dylib provides version 18.0.0
convert is installed?:
➜ ~ ls -la /usr/local/bin/convert
lrwxr-xr-x 1 jmunsch admin 41 Nov 26 15:47 /usr/local/bin/convert -> ../Cellar/imagemagick/6.9.2-6/bin/convert
what libraries is convert using
➜ ~ otool -L /usr/local/bin/convert
/usr/local/bin/convert:
/usr/local/Cellar/imagemagick/6.9.2-6/lib/libMagickCore-6.Q16.2.dylib (compatibility version 3.0.0, current version 3.0.0)
/usr/local/Cellar/imagemagick/6.9.2-6/lib/libMagickWand-6.Q16.2.dylib (compatibility version 3.0.0, current version 3.0.0)
/usr/local/opt/freetype/lib/libfreetype.6.dylib (compatibility version 19.0.0, current version 19.0.0)
/usr/local/opt/xz/lib/liblzma.5.dylib (compatibility version 8.0.0, current version 8.2.0)
/usr/lib/libbz2.1.0.dylib (compatibility version 1.0.0, current version 1.0.5)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
/usr/local/opt/libtool/lib/libltdl.7.dylib (compatibility version 11.0.0, current version 11.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
Everything appears to be up to date?
So how many places is that library?:
➜ ~ locate libfreetype
/Applications/GIMP.app/Contents/Resources/lib/libfreetype.6.dylib
/Applications/Steam.app/Contents/MacOS/libfreetype.dylib
/Volumes/Gimp 2.8.14/GIMP.app/Contents/Resources/lib/libfreetype.6.dylib
/usr/X11/lib/libfreetype.6.dylib
/usr/local/Cellar/freetype/2.6_1/lib/libfreetype.6.dylib
/usr/local/Cellar/freetype/2.6_1/lib/libfreetype.a
/usr/local/Cellar/freetype/2.6_1/lib/libfreetype.dylib
/usr/local/lib/libfreetype.6.dylib
/usr/local/lib/libfreetype.a
/usr/local/lib/libfreetype.dylib
Oh, I see:
➜ ~ otool -L /Applications/GIMP.app/Contents/Resources/lib/libfreetype.6.dylib
/Applications/GIMP.app/Contents/Resources/lib/libfreetype.6.dylib:
/usr/local/lib/libfreetype.6.dylib (compatibility version 19.0.0, current version 18.0.0)
So I copy it over:
➜ ~ cp /usr/local/opt/freetype/lib/libfreetype.6.dylib /Applications/GIMP.app/Contents/Resources/lib
And Retry:
➜ ~ /Applications/GIMP.app/Contents/MacOS/GIMP ~/Desktop/Export_These_Layers.xcf
Setting up environment...
Enabling internal Python...
Launching GIMP...
dyld: Library not loaded: /usr/local/lib/libpng16.16.dylib
Referenced from: /Applications/GIMP.app/Contents/Resources/lib/libfreetype.6.dylib
Reason: Incompatible library version: libfreetype.6.dylib requires version 34.0.0 or later, but libpng16.16.dylib provides version 29.0.0
[1] 69814 trace trap /Applications/GIMP.app/Contents/MacOS/GIMP ~/Desktop/Export_These_Layers.xcf
so I try libpng and copy it over to gimp:
➜ ~ locate libpng16
.
.
.
➜ ~ cp /usr/local/Cellar/libpng/1.6.18/lib/libpng16.16.dylib /Applications/GIMP.app/Contents/Resources/lib
Restart the gimp from terminal and retry using the plugin:
dyld: Library not loaded: /usr/local/opt/xz/lib/liblzma.5.dylib
Referenced from: /usr/local/bin/convert
Reason: Incompatible library version: convert requires version 8.0.0 or later, but liblzma.5.dylib provides version 6.0.0
okay where is it pulling this library from:
➜ ~ otool -L /usr/local/lib/liblzma.5.dylib
/usr/local/lib/liblzma.5.dylib:
/usr/local/opt/xz/lib/liblzma.5.dylib (compatibility version 8.0.0, current version 8.2.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
➜ ~ otool -L /Applications/GIMP.app/Contents/Resources/lib/liblzma.5.dylib
liblzma.5.dylib:
/Users/gimpdev/gimp/10.6/inst/lib/liblzma.5.dylib (compatibility version 6.0.0, current version 6.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)
And so I copy that file over as well:
cp /usr/local/lib/liblzma.5.dylib /Applications/GIMP.app/Contents/Resources/lib
Yet another issue after linking the new libraries:
convert: unable to load module `/usr/local/Cellar/imagemagick/6.9.2-6/lib/ImageMagick//modules-Q16/coders/png.la': file not found @ error/module.c/OpenModule/1300.
convert: no decode delegate for this image format `PNG' @ error/constitute.c/ReadImage/501.
convert: unable to load module `/usr/local/Cellar/imagemagick/6.9.2-6/lib/ImageMagick//modules-Q16/coders/png.la': file not found @ error/module.c/OpenModule/1300.
convert: no decode delegate for this image format `PNG' @ error/constitute.c/ReadImage/501.
convert: unable to load module `/usr/local/Cellar/imagemagick/6.9.2-6/lib/ImageMagick//modules-Q16/coders/png.la': file not found @ error/module.c/OpenModule/1300.
convert: no decode delegate for this image format `PNG' @ error/constitute.c/ReadImage/501.
convert: unable to load module `/usr/local/Cellar/imagemagick/6.9.2-6/lib/ImageMagick//modules-Q16/coders/png.la': file not found @ error/module.c/OpenModule/1300.
convert: no decode delegate for this image format `PNG' @ error/constitute.c/ReadImage/501.
I retry but build from source this time:
brew install imagemagick --build-from-source
Retry and same issue with PNG module, So I run brew doctor
:
echo 'export PATH="/usr/local/sbin:$PATH"' >> ~/.zshrc
So I retry installing libpng
:
➜ ~ brew uninstall imagemagick; brew install imagemagick;brew install libpng; brew link libpng
Warning: libpng-1.6.19 already installed
Warning: Already linked: /usr/local/Cellar/libpng/1.6.19
To relink: brew unlink libpng && brew link libpng
➜ ~ brew unlink libpng && brew link libpng
Unlinking /usr/local/Cellar/libpng/1.6.19... 18 symlinks removed
Linking /usr/local/Cellar/libpng/1.6.19... 18 symlinks created
And xz
:
brew uninstall xz
brew uninstall imagemagick; brew install imagemagick --build-from-source
And finally go for some harder rebuilding:
brew uninstall --force imagemagick; brew install -v imagemagick --build-from-source
I looked at the docs for convert’s ReadImage:
open /usr/local/Cellar/imagemagick//6.9.1-10/share/doc/ImageMagick-6/www/api/constitute.html
I read the source code for ReadImage
.
I stop, and look back at the python script.
I force the script to use jpeg instead of png.
It works.
Here is the working history that I attempted:
cd /Applications/GIMP.app/Contents/Resources/lib/gimp/2.0/plug-ins
chown jmunsch:admin export-layers-to-pdf.py
cd /var/folders/w1
/Applications/GIMP.app/Contents/MacOS/GIMP ~/Desktop/Export_These_Layers.xcf
otool -L /usr/local/bin/convert
brew update && brew upgrade
brew reinstall imagemagick
ls /usr/local/opt/freetype/lib/libfreetype.6.dylib
stat /usr/local/opt/freetype/lib/libfreetype.6.dylib
otool -L /usr/local/bin/convert
cp /usr/local/opt/freetype/lib/libfreetype.6.dylib /Applications/GIMP.app/Contents/Resources/lib
locate libpng16
cp /usr/local/Cellar/libpng/1.6.18/lib/libpng16.16.dylib /Applications/GIMP.app/Contents/Resources/lib
locate liblzma.5.dylib
otool -L /usr/local/lib/liblzma.5.dylib
otool -L /Applications/GIMP.app/Contents/Resources/lib/liblzma.5.dylib
cp /usr/local/lib/liblzma.5.dylib /Applications/GIMP.app/Contents/Resources/lib
which convert
ls -la /usr/local/bin/convert
ls /usr/local/Cellar/imagemagick/6.9.2-6/lib/ImageMagick//modules-Q16/
ls /usr/local/Cellar/imagemagick/6.9.2-6/lib/ImageMagick//modules-Q16/coders
/usr/local/Cellar/imagemagick/6.9.2-6/lib/ImageMagick//modules-Q16/coders/png.la
stat /usr/local/Cellar/imagemagick/6.9.2-6/lib/ImageMagick//modules-Q16/coders/png.la
convert '/var/folders/w1/gg1rwbxd17x07kv9swxwv84h0000gn/T/tmpsPHsvG.png' '/var/folders/w1/gg1rwbxd17x07kv9swxwv84h0000gn/T/tmpXGKL0S.png' '/var/folders/w1/gg1rwbxd17x07kv9swxwv84h0000gn/T/tmp196lyv.png' '/var/folders/w1/gg1rwbxd17x07kv9swxwv84h0000gn/T/tmprNZdlG.png' '/Users/jmunsch/Desktop/hggfd.pdf'
brew doctor
echo 'export PATH="/usr/local/sbin:$PATH"' >> ~/.zshrc
ls /usr/local/Cellar/imagemagick/6.9.2-6/lib/ImageMagick//modules-Q16
ls /usr/local/Cellar/imagemagick/6.9.2-6/lib/ImageMagick//modules-Q16/coders
cd ~/Desktop
python test.py
open /usr/local/Cellar/imagemagick//6.9.1-10/share/doc/ImageMagick-6/www/api/constitute.html
brew uninstall imagemagick; brew install imagemagick;brew install libpng; brew link libpng
brew --config
brew uninstall xz
brew uninstall imagemagick; brew install imagemagick --build-from-source
brew uninstall --force imagemagick; brew install -v imagemagick --build-from-source
cp /usr/local/lib/liblzma.5.dylib /Applications/GIMP.app/Contents/Resources/lib
brew uninstall --force imagemagick
brew update && brew upgrade && brew uninstall --force imagemagick && brew install -v imagemagick --build-from-source
which convert
ls -la /usr/local/bin/convert
Attribution
Source : Link , Question Author : jmunsch , Answer Author : jmunsch