Cut exception: Cannot run program "gm": error=2, No such file or directory processing
Using im4java, ImageMagick/Graphics Magick to cut the graph, the result indicates that gm can not find this exception when the test environment runs.
org.im4java.core.CommandException: java.io.IOException: Cannot run program "gm": error=2, No such file or directory
at org.im4java.core.ImageCommand.run(ImageCommand.java:219) ~[im4java-1.4.0.jar:na]
at com.test.craw.utils.ImageUtils.zoomImage(ImageUtils.java:182) [classes/:na]
at com.test.craw.utils.ImageUtils.zoomImageWidth(ImageUtils.java:202) [classes/:na]
at com.test.craw.service.BeautyService.crop(BeautyService.java:205) [classes/:na]
at com.test.craw.service.BeautyService.updateGallery(BeautyService.java:107) [classes/:na]
at com.test.craw.task.TestSpiderTask$TestBeautyThread.run(TestSpiderTask.java:113) [classes/:na]
at java.lang.Thread.run(Thread.java:745) [na:1.7.0_80]
Caused by: java.io.IOException: Cannot run program "gm": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047) ~[na:1.7.0_80]
at org.im4java.process.ProcessStarter.startProcess(ProcessStarter.java:407) ~[im4java-1.4.0.jar:na]
at org.im4java.process.ProcessStarter.run(ProcessStarter.java:312) ~[im4java-1.4.0.jar:na]
at org.im4java.core.ImageCommand.run(ImageCommand.java:215) ~[im4java-1.4.0.jar:na]
... 6 common frames omitted
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method) ~[na:1.7.0_80]
at java.lang.UNIXProcess.<init>(UNIXProcess.java:187) ~[na:1.7.0_80]
at java.lang.ProcessImpl.start(ProcessImpl.java:130) ~[na:1.7.0_80]
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028) ~[na:1.7.0_80]
... 9 common frames omitted
[ERROR][2017-08-15 14:30:24] - [com.test.craw.service.BeautyService] - Chart failure:Logger[com.test.craw.service.BeautyService]
java.lang.Exception: org.im4java.core.CommandException: java.io.IOException: Cannot run program "gm": error=2, No such file or directory
at com.test.craw.utils.ImageUtils.zoomImage(ImageUtils.java:191) ~[classes/:na]
at com.test.craw.utils.ImageUtils.zoomImageWidth(ImageUtils.java:202) ~[classes/:na]
at com.test.craw.service.BeautyService.crop(BeautyService.java:205) [classes/:na]
at com.test.craw.service.BeautyService.updateGallery(BeautyService.java:107) [classes/:na]
at com.test.craw.task.TestSpiderTask$TestBeautyThread.run(TestSpiderTask.java:113) [classes/:na]
at java.lang.Thread.run(Thread.java:745) [na:1.7.0_80]
Caused by: org.im4java.core.CommandException: java.io.IOException: Cannot run program "gm": error=2, No such file or directory
at org.im4java.core.ImageCommand.run(ImageCommand.java:219) ~[im4java-1.4.0.jar:na]
at com.test.craw.utils.ImageUtils.zoomImage(ImageUtils.java:182) ~[classes/:na]
... 5 common frames omitted
Caused by: java.io.IOException: Cannot run program "gm": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047) ~[na:1.7.0_80]
at org.im4java.process.ProcessStarter.startProcess(ProcessStarter.java:407) ~[im4java-1.4.0.jar:na]
at org.im4java.process.ProcessStarter.run(ProcessStarter.java:312) ~[im4java-1.4.0.jar:na]
at org.im4java.core.ImageCommand.run(ImageCommand.java:215) ~[im4java-1.4.0.jar:na]
... 6 common frames omitted
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method) ~[na:1.7.0_80]
at java.lang.UNIXProcess.<init>(UNIXProcess.java:187) ~[na:1.7.0_80]
at java.lang.ProcessImpl.start(ProcessImpl.java:130) ~[na:1.7.0_80]
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028) ~[na:1.7.0_80]
... 9 common frames omitted
Input gm directly on the command line, and input information normally
GraphicsMagick 1.3.26 2017-07-04 Q8 http://www.GraphicsMagick.org/
Copyright (C) 2002-2017 GraphicsMagick Group.
Additional copyrights and licenses apply to this software.
See http://www.GraphicsMagick.org/www/Copyright.html for details.
Usage: gm command [options ...]
Where commands include:
animate - animate a sequence of images
batch - issue multiple commands in interactive or batch mode
benchmark - benchmark one of the other commands
compare - compare two images
composite - composite images together
conjure - execute a Magick Scripting Language (MSL) XML script
convert - convert an image or sequence of images
display - display an image on a workstation running X
help - obtain usage message for named command
identify - describe an image or image sequence
import - capture an application or X server screen
mogrify - transform an image or sequence of images
montage - create a composite image (in a grid) from separate images
time - time one of the other commands
version - obtain release version
In the environment variable file / etc/profile, the page sets the corresponding environment variable.
export GMAGICK_HOME="/usr/local/GraphicsMagick-1.3.26"
export PATH="$GMAGICK_HOME/bin:$PATH"
LD_LIBRARY_PATH=$GMAGICK_HOME/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
export IM4JAVA_TOOLPATH=/usr/local/GraphicsMagick-1.3.26/bin
Through verification, it is found that a command query directory needs to be set manually after ConvertCmd initialization [convert.setSearchPath("/usr/local/Graphics Magick-1.3.26/bin");]
IMOperation op = new IMOperation();
op.addImage(imagePath);
op.crop(width, height, x, y);
op.addImage(newPath);
ConvertCmd convert = new ConvertCmd(true);
convert.setSearchPath("/usr/local/GraphicsMagick-1.3.26/bin");
convert.run(op);
Not only ConvertCmd needs to be added, but all classes inheriting ImageCommand need to be used, such as Identify Cmd.
The following are all classes that inherit ImageCommand.
SetSearchPath ("/usr/local/Graphics Magick-1.3.26/bin")
Run again and you won't be prompted for exceptions!