2015-09-29 6 views
0

Я хочу использовать ImageMagick в своем приложении Grails. Я использую следующие зависимости в BuildConfig.groovyImageMagick with Grails

compile('jmagick:jmagick:6.6.9') 
compile('org.im4java:im4java:1.2.0') 

Однако, когда я пытаюсь запустить я получаю эту ошибку:

org.im4java.core.CommandException: java.io.IOException: Cannot run program 
"convert": error=2, No such file or directory. 

Как использовать ImageMagick или Jmagick с Grails, не устанавливая его непосредственно, я Мне не хватает некоторых зависимостей?

+0

http://im4java.sourceforge.net/docs/dev-guide .html – doelleri

ответ

1

jmagick и im4java используют два разных подхода к использованию ImageMagick. Короче говоря, jmagick использует Java INI для доступа к API ImageMagick, а im4java вызывает средства ImageMagick. Другими словами, jmagick объединяет ImageMagick, а im4java - нет. Как вы, вероятно, знаете, ошибка связана с тем, что ImageMagick не установлен или не находится в среде PATH.

im4java

Два не идут вместе. Например, вы не можете использовать im4java для вызова jmagick, чтобы избежать установки ImageMagick на компьютер, на котором установлено приложение Grails. Чтобы использовать im4java, вам необходимо установить ImageMagick.

jmagick

Поскольку jmagick частично реализованы в C, это может быть проблематично использовать в Servlet контейнер. Это, безусловно, сделает веб-приложение не переносным. Что может быть сделано, чтобы контейнер Servlet предоставил jmagick для этой платформы и исключил jmagick из военного файла. Не спрашивайте меня, как это сделать :)

0

Прежде всего, я предлагаю вам использовать 1.4.0 версию imagemagick :). Чтение ошибки, похоже, что вы не настроили путь imagemagick. В моем приложении Grails, который использует код ImageMagick выглядит следующим образом:

@Value('${externalTools.imagemagick.path:/usr/local/bin}') 
private String imagemagickPath 

CreateTemporaryThumbnailsResult call(CreateTemporaryThumbnailsEvent event){ 

    log.debug("IMAGEMAGICK PATH: $imagemagickPath") 

    String originalFilePath = generateOriginalFilePath(event.fileName, event.fileExtension) 
    String mediumFilePath = generateMediumFilePath(event.fileName, event.fileExtension) 

    // create command 
    ConvertCmd cmd = new ConvertCmd(); 
    cmd.setSearchPath(imagemagickPath) 

    // create the operation, add images and operators/options 
    IMOperation op = new IMOperation(); 
    op.addImage(originalFilePath); 

    op.thumbnail(mediumSizeImage, mediumSizeImage) 
    op.background("white") 
    op.gravity("center") 
    op.extent(mediumSizeImage,mediumSizeImage) 
    op.addImage(mediumFilePath); 

    // execute the operation 
    try { 
     cmd.run(op); 
    } catch (IOException e) { 
     return new CreateTemporaryThumbnailsResult(false) 
    } catch (InterruptedException e){ 
     return new CreateTemporaryThumbnailsResult(false) 
    } catch(Exception e){ 
     return new CreateTemporaryThumbnailsResult(false) 
    } 

    return new CreateTemporaryThumbnailsResult(true, event.fileName + ImageSize.MEDIUM.toString() + "." + event.fileExtension, event.fileName) 
} 

Я использовал hipsteroid проект Grails в качестве примера, чтобы узнать, как использовать ImageMagick с Грааль, я предлагаю вам сделать то же самое, если у вас есть какое-либо сомнение, это действительно полный информации об обработке изображений с помощью groovy и imagemagick.

0

Вы также можете установить ImageMagick на вашей машине и использовать «ExecuteCommand», чтобы выполнить команду оболочки для редактирования изображений, как:

def resizeCommand = "/usr/bin/convert pathTo/myOriginalImage.jpg -resize 1920 -quality 80 pathTo/myNewImage.jpg" 
      executeCommand(resizeCommand)