八度无法使用GraphicsMagick读取文件

时间:2018-10-21 20:15:45

标签: octave graphicsmagick

我试图在OS X上使用GraphicsMagick 1.3.27(通过brew)在Octave 4.2.1中加载图像。这是错误:

    public function updateCart(Request $request)
{
    $value = $request->session()->get('cart')->items;
    //unset(Session::get('cart')->items[$id]);
    $arr    =   explode('_',$request->form_prdid);
    Session::get('cart')->totalQuantity =   (Session::get('cart')->totalQuantity-Session::get('cart')->items[$arr[0]][$arr[1]]['qty'])+$request->form_qty;
    Session::get('cart')->items[$arr[0]][$arr[1]]['qty']    =   $request->form_qty;
    flash()->success('Cart is successfully updated!');
    return redirect('/shopping-cart/');
}

GraphicsMagick看起来配置正确:

>> img = imread('./myimg.jpg')
error: Magick++ exception: octave-cli-4.2: No decode delegate for this 
image format (<path to myimg.jpg>) reported by magick/constitute.c:1535 (ReadImage)
 error: called from
    __imread__ at line 80 column 10
    imageIO at line 117 column 26
    imread at line 106 column 30

尝试加载png文件会导致相同的错误。直接从命令行使用 gm -version GraphicsMagick 1.3.27 Q16 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. Feature Support: Native Thread Safe yes Large Files (> 32 bit) yes Large Memory (> 32 bit) yes BZIP yes DPS no FlashPix no FreeType yes Ghostscript (Library) no JBIG no JPEG-2000 no JPEG yes Little CMS no Loadable Modules yes OpenMP no PNG yes TIFF yes TRIO no UMEM no WebP no WMF no X11 no XML no ZLIB yes Host type: x86_64-apple-darwin16.7.0 Configured using the command: ./configure '--prefix=/usr/local/Cellar/graphicsmagick/1.3.27' '-- disable-dependency-tracking' '--enable-shared' '--disable-static' '--with-modules' '--without-lzma' '--disable-openmp' '--with-quantum-depth=16' '--disable-installed' '--without-gslib' '--with-gs-font-dir=/usr/local/share/ghostscript/fonts' '--without-x' '--without-lcms2' 'CC=clang' 'CXX=clang++' Final Build Parameters: CC = clang CFLAGS = -g -O2 -Wall -D_THREAD_SAFE CPPFLAGS = -I/usr/local/opt/freetype/include/freetype2 CXX = clang++ CXXFLAGS = -D_THREAD_SAFE LDFLAGS = -L/usr/local/opt/freetype/lib LIBS = -lfreetype -lbz2 -lz -lltdl -lm -lpthread 可以正常工作。

1 个答案:

答案 0 :(得分:3)

您的八度和gm安装可能与不同的GraphicsMagick库链接,因此gm -version的输出可能不准确。您可能应该从Octave本身内部进行检查,就像这样:

octave:1> imformats 
Extension | isa | Info | Read | Write | Alpha | Description
----------+-----+------+------+-------+-------+------------
bmp       | yes | yes  | yes  | yes   | yes   | Microsoft Windows bitmap image
cur       | yes | yes  | yes  | no    | yes   | Microsoft Cursor Icon
gif       | yes | yes  | yes  | yes   | yes   | CompuServe graphics interchange format
ico       | yes | yes  | yes  | no    | yes   | Microsoft Icon
jbg       | yes | yes  | yes  | yes   | yes   | Joint Bi-level Image experts Group interchange format
jbig      | yes | yes  | yes  | yes   | yes   | Joint Bi-level Image experts Group interchange format
jpg, jpeg | yes | yes  | yes  | yes   | yes   | Joint Photographic Experts Group JFIF format
pbm       | yes | yes  | yes  | yes   | yes   | Portable bitmap format (black/white)
pcx       | yes | yes  | yes  | yes   | yes   | ZSoft IBM PC Paintbrush
pgm       | yes | yes  | yes  | yes   | yes   | Portable graymap format (gray scale)
png       | yes | yes  | yes  | yes   | yes   | Portable Network Graphics
pnm       | yes | yes  | yes  | yes   | yes   | Portable anymap
ppm       | yes | yes  | yes  | yes   | yes   | Portable pixmap format (color)
ras       | yes | yes  | yes  | yes   | yes   | SUN Rasterfile
tga, tpic | yes | yes  | yes  | yes   | yes   | Truevision Targa image
tif, tiff | yes | yes  | yes  | yes   | yes   | Tagged Image File Format
xbm       | yes | yes  | yes  | yes   | yes   | X Windows system bitmap (black/white)
xpm       | yes | yes  | yes  | yes   | yes   | X Windows system pixmap (color)
xwd       | yes | yes  | yes  | yes   | yes   | X Windows system window dump (color)

您还可以检查ldd实际使用了哪个Octave库(由于您使用的是Mac,因此您可能没有ldd,但是Google告诉我otool -L是Mac解决方案)。就我而言,我知道它们是相同的:

$ ldd /usr/local/lib/octave/5.0.0/liboctinterp.so | grep Magick
    libGraphicsMagick++-Q16.so.12 => /lib/libGraphicsMagick++-Q16.so.12 (0x00007f858a896000)
    libGraphicsMagick-Q16.so.3 => /lib/libGraphicsMagick-Q16.so.3 (0x00007f858a52e000)
$ ldd /usr/bin/gm | grep Magick
    libGraphicsMagick-Q16.so.3 => /lib/libGraphicsMagick-Q16.so.3 (0x00007f5041f66000)

一旦知道了Octave用于GraphicsMagick的实际库,就可以检查该库是否与libjpeg链接:

$ ldd /lib/libGraphicsMagick++-Q16.so.12 | grep jpeg
    libjpeg.so.62 => /lib/x86_64-linux-gnu/libjpeg.so.62 (0x00007f63e910c000)

您也许还可以从八度配置中获得一些提示:

octave:1> __octave_config_info__.build_environment.MAGICK_CPPFLAGS
ans = -I/usr/include/GraphicsMagick
octave:2> __octave_config_info__.build_environment.MAGICK_LDFLAGS
ans = 
octave:3> __octave_config_info__.build_environment.MAGICK_LIBS
ans = -lGraphicsMagick++ -lGraphicsMagick