Paperclip::NotIdentifiedByImageMagickError in Spree::Admin::ImagesController#create - ruby-on-rails

I am attempting to setup Spree for the first time. Everything was going well until I hit the image upload. I have installed Imageamgick using homebrew on Mac OSX Mountain Lion. Uploading any image gives me the following error.
Paperclip::NotIdentifiedByImageMagickError in Spree::Admin::ImagesController#create
Command :: identify -format %wx%h :file
[paperclip] An error was received while processing: #<Paperclip::NotIdentifiedByImageMagickError: /var/folders/fq/9g_6hmg513g6137rb6sbghw00000gn/T/stream20121005-26943-16883d4.png is not recognized by the 'identify' command.>
Paperclip::NotIdentifiedByImageMagickError (/var/folders/fq/9g_6hmg513g6137rb6sbghw00000gn/T/stream20121005-26943-16883d4.png is not recognized by the 'identify' command.):
paperclip (2.7.1) lib/paperclip/geometry.rb:29:in `from_file'
spree_core (1.2.0) app/models/spree/image.rb:35:in `find_dimensions'
activesupport (3.2.8) lib/active_support/callbacks.rb:405:in `_run__1794851703999987262__post_process__1580526166879208018__callbacks'
When I run identify from the command line I get the following output
Image Settings:
-alpha option on, activate, off, deactivate, set, opaque, copy
transparent, extract, background, or shape
-antialias remove pixel-aliasing
-authenticate password
decipher image with this password
-channel type apply option to select image channels
-colorspace type alternate image colorspace
-crop geometry cut out a rectangular region of the image
-define format:option
define one or more image format options
-density geometry horizontal and vertical density of the image
-depth value image depth
-extract geometry extract area from image
-features distance display image features (e.g. contrast, correlation)
-format "string" output formatted image characteristics
-fuzz distance colors within this distance are considered equal
-gamma value of gamma correction
-interlace type type of image interlacing scheme
-interpolate method pixel color interpolation method
-limit type value pixel cache resource limit
-monitor monitor progress
-ping efficiently determine image attributes
-quiet suppress all warning messages
-regard-warnings pay attention to warning messages
-respect-parentheses settings remain in effect until parenthesis boundary
-sampling-factor geometry
horizontal and vertical sampling factor
-seed value seed a new sequence of pseudo-random numbers
-set attribute value set an image attribute
-size geometry width and height of image
-strip strip image of all profiles and comments
-unique display the number of unique colors in the image
-units type the units of image resolution
-verbose print detailed information about the image
-virtual-pixel method
virtual pixel access method
Image Operators:
-negate replace every pixel with its complementary color
Miscellaneous Options:
-debug events display copious debugging information
-help print program options
-list type print a list of supported option arguments
-log format format of debugging information
-version print version information
By default, the image format of `file' is determined by its magic
number. To specify a particular image format, precede the filename
with an image format name and a colon (i.e. ps:image) or specify the
image type as the filename suffix (i.e. image.ps). Specify 'file' as
'-' for standard input or output.
Any help would be greatly appreciated.
Thanks,
Cory

My error was - “Paperclip::NotIdentifiedByImageMagickError in Spree::Admin::ImagesController”
I fixed this error some days ago.
Before that I tried:
Update XCode (with Command-Line Tools)
Update Imagemagick (i tried it from source and as binary module)
Update MacPort
Used Brew (refreshing with all dependencies for Imagemagic,
used “brew doctor”), not MacPort
Reinstall all gems that use Imagemagick
Bundle update
etc
And sure I had my “Paperclip::Attachment.default_options[:command_path]” option in production.rb file pointing to Imagemagick bin folder.
Several times i did it from a to z, again and again.
But nothing could help me.
By the way, in all cases i had worked fine “convert”, “identify” and “display” with test images of any kind, but not in my rails app (spree app).
I dived dipper and tried to do research inside rails console with
Paperclip.run("identify", "-format %m :file", :file => "/path/to/image”)
as paperclip do. And only new format (cocaine 0.4) of this command:
Paperclip.run("identify", "-format %m /path/to/image")
worked fine!!!
As a result, i found that cocaine 0.4 is the source of my problem. I tried downgrade to cocaine 0.3.2 in my Gemfile and my Spree app start working!!!
All i need to do is use cocaine 0.3.2 instead of 0.4!!!

Check if png format is in the list of compiled formats of identify:
identify -list format
If it's not, you might have to recompile it with these options:
./configure --prefix=/usr/local --with-bzlib=yes --with-fontconfig=yes --with-freetype=yes --with-gslib=yes --with-gvc=yes --with-jpeg=yes --with-jp2=yes --with-png=yes --with-tiff=yes

Also I met the problem when image file doesn't exists in public folder.
I've just copied a random file with the same name and everything started work.
parepclip 2.7.5 cocain 0.3.2

Related

How do I convert a CMYK tif with unknown profile to png (RBG)?

I am trying to convert a tiff CMYK image to PNG and cannot find out the ICC profile, which leads to wrong colors in the converted PNG.
I tried the following to determine the profile:
$ identify -format "%[profile:icc]" test.tif
With no result.
And, the following, with no usable result:
$ identify -verbose test.tiff |grep -i profile
crs:CameraProfile: Adobe Standard
crs:CameraProfileDigest: 3DA8CE4A626CE36A1D0C55BF157793C9
crs:LensProfileEnable: 0
crs:LensProfileSetup: LensDefaults
Profiles:
Profile-8bim: 8730 bytes
Profile-tiff:37724: 3132408 bytes
Profile-xmp: 30533 bytes
After that I downloaded Adobe's profiles and tried each of them, but not a single one did work. This is how I tried to apply the profiles:
convert -profile CMYKProfiles.icc -profile AppleRGB.icc -colorspace rgb test.tif test.png
That works, but only if I know the profile and supply the right profile. In my case that doesn't work.
Is the image just broken or is there a way to convert it preserving its colors?
Your file has 4 layers or pages. The one you want seems to be the first layer/page. Each is CMYK with no color profile. Without profiles, it is possible that each display device might show the image differently depending upon what default profile is used, if any.
But with Imagemagick, I get pretty close using USWebCoatedSwop.icc and sRGB.icc profiles as follows
convert -quiet test.tif[0] -profile /Users/fred/images/profiles/USWebCoatedSwop.icc -profile /Users/fred/images/profiles/sRGB.icc test.png
test.png

How to use mogrify (ImageMagick) to convert from NEF to *.jpg and retain EXIF data?

I'm converting about 9000 photos from .NEF to .jpg.
I'd like to retain all EXIF data, most importantly Date and time created, Latidude and Longitude.
I'd like the JPGs to be at the highest possible quality.
I've just gotten started using ImageMagick from the command line. I also have Exiftool installed. I'm using the mogrify command because it handles batches nicely.
When I run
mogrify -format jpg *.NEF
All of my .NEF files are successfully converted to JPGs, but all EXIF data are lost.
I've searched around quite a bit to try and find a solution to this and it seems like I may have to install ufraw, but if possible I'd like a solution that uses software I already have - ImageMagick and Exiftool.
Thanks in advance for any advice you have about how to do this.
Update:
The images I converted using mogrify are slightly smaller (~ 1-2 MB) than those output by my colleague using picasa to convert NEF to JPG. But when I specify -quality 100 in ImageMagick the image sizes gain about 45 MB! Why?
The code exiftool -tagsfromfile %d%f.NEF -ext jpg -overwrite_original . adds the exif information to the JPGs.
Think twice before doing this - you really are discarding a lot of information - and if you don't want it, why not shoot JPEG instead of RAW in the first place?
FWIW, you can use ImageMagick to get the JPEG:
convert somefile.NEF somefile.jpg
Then you can copy the tags across from the original to the file newly created by ImageMagick:
exiftool -tagsfromfile somefile.NEF -all:all somefile.jpg
If you have thousands of images, and are on macOS or a decent Linux/Unix-based OS, I would recommend GNU Parallel like this and it will keep busy all those lovely cores that you paid Intel so dearly for:
parallel --dry-run 'convert {} {.}.jpg; exiftool -tagsfromfile {} -all:all {.}.jpg' ::: *nef
Sample Output
convert a.nef a.jpg; exiftool -tagsfromfile a.nef -all:all a.jpg
convert b.nef b.jpg; exiftool -tagsfromfile b.nef -all:all b.jpg
and if that looks good remove the --dry-run so it actually runs the command.
If you are on Windows, you will have to do some ad-hoc jiggery-pokery to get it done in any reasonable time frame. You can use the mogrify command and get all the conversions done to JPEG and then do all the exiftool re-embedding of the EXIF data later. If your files are named with some sort of system with incrementing numbers, you can start two or three copies of mogrify in parallel - say one doing files whose names end in [0-4] and another one doing files whose names end in [5-9]. I don't speak Windows, but that would probably look like these two commands each running in its own Command Prompt:
mogrify -format jpg *0.NEF *1.NEF *2.NEF *3.NEF *4.NEF
mogrify -format jpg *5.NEF *6.NEF *7.NEF *8.NEF *9.NEF
Then you would do the exiftool stuff when they had all finished but you would have to use a FOR loop like this:
FOR %%G IN (*.NEF) DO (
exiftool -tagsfromfile %%G -all:all %%~dpnG.jpg
)
The %%~dpnG part is a guess based on this answer.

imagemagick with grayscale not working

I am trying to change a file named "anvil_base.png" to grayscale so I am using imagemagick. What I am entering is convert anvil_base.png -colorspace Gray -gamma 2.2 anvil_base.png
but it is just returning this
Invalid Parameter - -colorspace
What am I doing wrong?
I suspect you are on Windows and you have not put the directory where ImageMagick is installed ahead of other directories in your PATH. You have three choices:
Option 1
As Glenn kindly points out, if you are using ImageMagick version 7 or newer, you can use the new name for convert which is magick, like this:
magick image.png -colorspace gray ...
Option 2
Use the full path to ImageMagick every time, something like this:
C:\ImageMagick-6.9.3\convert ...
Option 3
Change your PATH. So you would need to do:
Start->Programs->Control Panel->System->Advanced
and then choose Environment Variables and change PATH so that it looks like:
PATH=C:\ImageMagick-6.9.3;C:\Windows;C:\Windows\System32
The main thing is that ImageMagick directory is at the start of the PATH. Then Windows will find the convert which is part of ImageMagick before it finds the built-in Windows convert program which converts FAT filesystems to NTFS. If you choose Option 3 above, you need to either log out and back in again, or start a new Command Prompt for the new PATH to become active.

Batch converting .eps to .jpg in imagemagick and making .mkv

I am trying to convert multiple .eps files into .jpg ones. By looking at answers here in SO, I was able to do it for single separate files.
The problem is that, when I'm trying to do it for all the files, they don't show any .jpg file.
I am currently using Imagemagick with the command
convert -density 300 outputs-000.eps -flatten outputs-000.jpg
I believe the problem is because my files are written as
outputs-000.eps
outputs-001.eps
outputs-002.eps
outputs-003.eps
...
outputs-145.eps
...
and so on. I tried putting %d (as in outputs-%d.eps and outputs-%d.jpg), but with no success.
Apart from that, I intent to get all those files and "convert" them into an .mkv or .gif or similar type (they are images of the time configuration of a particle collision system, so each image is a frame, so the goal is to make it into a 10sec movie). If there is a way to do that directly from the .eps, even better. Any help is welcome, since I've been trying to do this for several hours now. Thank you.
You should be able to make an animated GIF in one go like this:
convert -density 300 outputs-*eps -delay 200 animated.gif
Failing that, you should be able to convert all your eps files to, say PNG with:
mogrify -density 300 -format png outputs-*eps
Be careful with mogrify - it overwrites your input files unless you specify -path for an output directory, or you change format - like I just did to PNG.
For anyone who lands here trying to figure out how to work around ImageMagic's convert: not authorized without reverting the change that was made to the system-wide security policy to close a vulnerability, here's how you'd use Ghostscript to do a batch EPS-to-JPEG conversion directly without bringing ImageMagick into the mix:
gs -dSAFER -dEPSCrop -r300 -sDEVICE=jpeg -o outputs-%03d.jpg outputs-*.eps
-dSAFER puts Ghostscript in a sandboxed mode where Postscript code can only interact with the files you specified on the command line. (Yes, the parts of EPS, PS, and PDF files that define the page contents are in a turing-complete programming language.)
-dEPSCrop asks for the rendered output to be cropped to the bounding box of the drawing rather than padded out to whatever size page Ghostscript expects you to be printing to. (See the manual for details.)
The -r300 requests 300 DPI (-r600 for 600 DPI, etc.)
The -sDEVICE specifies the output format (See the Devices section of the manual for other choices.)
-o is a shorthand for -dBATCH -dNOPAUSE -sOutputFile=
This section of the Ghostscript manual gives some example formats for for multi-file filename output but, for the actual syntax definition, it points you at the documentation for the C printf(3) function.
Once you've got your JPEGs, you can follow the instructions in this answer over on the Video Production Stack Exchange to combine them into an MKV file.
The TL;DR is this command here:
ffmpeg -framerate 30 -i outputs-%03d.jpg -codec copy output.mkv
Check out the other answers if you want something that performs inter-frame compression rather than aiming to avoid transcoding the JPEGs again.
(If you want the best compromise, have Ghostscript output PNGs and then let ffmpeg handle switching to lossy compression.)

ImageMagick or Ghostscript: Create Image from PDF

I'm working on a big problem: I have to create a perfect colored JPEG from a PDF file. But there still small differences in green or blue color. I'm using Ghostscript version 8.71 on a Debian system.
Original PDF file:
http://content.test.de/configurations/82/e2/82e2897f5448e73769655317e8fdee77/output.pdf
The simple way via
convert output.pdf -density 600 -quality 100 output.jpg
Result:
http://content.test.de/configurations/82/e2/82e2897f5448e73769655317e8fdee77/output-0.jpg
creates a very light green having nothing to do with the color in the PDF.
After that I tried two other ways with better results, but not perfect:
Via ImageMagick:
convert output.pdf -profile sRGB_v4_ICC_preference.icc \
-density 600 -quality 100 test.jpg
convert -profile ISOcoated_v2_eci.icc -profile eciRGB_v2.icc \
-quality 100 test-1.jpg finish-1.png
Result: Links like before with filename "finish-0.png" (I can just write two links).
Via Ghostscript:
gs -dNOPAUSE -sDEVICE=jpegcmyk -dFirstPage=1 -dLastPage=237 \
-sOutputFile=image%d.jpg -dJPEGQ=95 -dUseCIEColor -g850x610 \
-dPDFFitPage -r300 -q output.pdf -c quit
Result: Links like before with filename "image1.jpg" (I can just write two links).
Anybody has an idea to get a perfect result?
First, use a recent version of Ghostscript, 8.71 is 3 years old. Versions prior to 9.0 will use standard PostScript colour conversions, 9.0 onwards use Little CMS. Your PDF file uses ICC profile based colour spaces with 3 components (RGB), PostScritp RGB->CMYK is fast but inaccurate, so best not to do that.
I believe that if you use a decently up to date version you will find the results adequate without any further tweaking. Do NOT use -dUseCIEColor! That's a horrible PostScript kludge.
It also looks like the jpegcmyk device isn't doing proper colour management, is there a reason you can't use the jpeg device ?

Resources