From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Juri Linkov Newsgroups: gmane.emacs.bugs Subject: bug#10112: ImageMagick doesn't display some image formats Date: Thu, 24 Nov 2011 21:09:12 +0200 Organization: JURTA Message-ID: <87zkfltk13.fsf@mail.jurta.org> References: <871usz3jh8.fsf@mail.jurta.org> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: dough.gmane.org 1322162201 12483 80.91.229.12 (24 Nov 2011 19:16:41 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Thu, 24 Nov 2011 19:16:41 +0000 (UTC) To: 10112@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Nov 24 20:16:36 2011 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([140.186.70.17]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1RTemh-0001By-Pq for geb-bug-gnu-emacs@m.gmane.org; Thu, 24 Nov 2011 20:16:36 +0100 Original-Received: from localhost ([::1]:34576 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RTemh-0000Mm-3H for geb-bug-gnu-emacs@m.gmane.org; Thu, 24 Nov 2011 14:16:35 -0500 Original-Received: from eggs.gnu.org ([140.186.70.92]:55134) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RTemd-0000JY-UB for bug-gnu-emacs@gnu.org; Thu, 24 Nov 2011 14:16:33 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RTemc-0007CH-2L for bug-gnu-emacs@gnu.org; Thu, 24 Nov 2011 14:16:31 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:35926) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RTemc-0007CD-0m for bug-gnu-emacs@gnu.org; Thu, 24 Nov 2011 14:16:30 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.69) (envelope-from ) id 1RTeo6-00062c-12 for bug-gnu-emacs@gnu.org; Thu, 24 Nov 2011 14:18:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Juri Linkov Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 24 Nov 2011 19:18:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 10112 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 10112-submit@debbugs.gnu.org id=B10112.132216226723198 (code B ref 10112); Thu, 24 Nov 2011 19:18:01 +0000 Original-Received: (at 10112) by debbugs.gnu.org; 24 Nov 2011 19:17:47 +0000 Original-Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RTenq-000626-Vy for submit@debbugs.gnu.org; Thu, 24 Nov 2011 14:17:47 -0500 Original-Received: from smarty.dreamhost.com ([208.113.175.8]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RTenn-00061x-Lz for 10112@debbugs.gnu.org; Thu, 24 Nov 2011 14:17:45 -0500 Original-Received: from ps18281.dreamhostps.com (ps18281.dreamhost.com [69.163.218.105]) by smarty.dreamhost.com (Postfix) with ESMTP id 678926E804B for <10112@debbugs.gnu.org>; Thu, 24 Nov 2011 11:16:10 -0800 (PST) Original-Received: from localhost (ps18281.dreamhostps.com [69.163.218.105]) by ps18281.dreamhostps.com (Postfix) with ESMTP id 4B2D6451C58D for <10112@debbugs.gnu.org>; Thu, 24 Nov 2011 11:16:03 -0800 (PST) In-Reply-To: <871usz3jh8.fsf@mail.jurta.org> (Juri Linkov's message of "Wed, 23 Nov 2011 00:01:07 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.91 (x86_64-pc-linux-gnu) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list Resent-Date: Thu, 24 Nov 2011 14:18:02 -0500 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:54273 Archived-At: > So at least moving `MagickSetResolution' a few lines below and calling after > `MagickPingImage' will allow the read-only images to be correctly displayed: Patch installed. > Read-only formats like .dot have only read-functions, but not write-functions > (the error being "no encode delegate for this image format"). I think we should expose ImageMagick error messages to Emacs. The patch below adds a new function `imagemagick_error' that is called in places where the ImageMagick returns `MagickFalse' status. It puts the error message to the *Messages* buffer. This function helps to understand why ImageMagick fails to display images. For instance, now with more informative error message it reveals why Gnus can't display some ImageMagick formats demonstrated at http://debbugs.gnu.org/9044#41 The error message is: no decode delegate for this image format `' @ error/blob.c/BlobToImage/349 This means that ImageMagick is unable to read a TGA image from Blob, i.e. when the image is defined by the :data tag like Gnus does. OTOH, when a TGA image is defined by the :file tag, then ImageMagick can read it and display correctly. We could try to write an image to a temporary file before displaying it, but I'm not sure if it's worth the trouble to overcome shortcomings of ImageMagick. === modified file 'src/image.c' --- src/image.c 2011-11-24 19:02:39 +0000 +++ src/image.c 2011-11-24 19:08:18 +0000 @@ -7564,6 +7564,19 @@ (at your option) any later version. MagickPixelPacket *); #endif +static void +imagemagick_error (MagickWand *wand) +{ + char *description; + ExceptionType severity; + + description = MagickGetException (wand,&severity); + image_error ("ImageMagick error: %s", + make_string (description, strlen (description)), + Qnil); + description = (char *) MagickRelinquishMemory (description); +} + /* Helper function for imagemagick_load, which does the actual loading given contents and size, apart from frame and image structures, passed from imagemagick_load. Uses librimagemagick to do most of @@ -7628,6 +7641,13 @@ (at your option) any later version. status = MagickPingImageBlob (ping_wand, contents, size); } + if (status == MagickFalse) + { + imagemagick_error (ping_wand); + DestroyMagickWand (ping_wand); + return 0; + } + MagickSetResolution (ping_wand, 2, 2); if (! (0 <= ino && ino < MagickGetNumberImages (ping_wand))) @@ -7669,7 +7689,10 @@ (at your option) any later version. { image_wand = NewMagickWand (); if (MagickReadImageBlob (image_wand, contents, size) == MagickFalse) - goto imagemagick_error; + { + imagemagick_error (image_wand); + goto imagemagick_error; + } } /* If width and/or height is set in the display spec assume we want @@ -7697,6 +7720,7 @@ (at your option) any later version. if (status == MagickFalse) { image_error ("Imagemagick scale failed", Qnil, Qnil); + imagemagick_error (image_wand); goto imagemagick_error; } } @@ -7751,6 +7775,7 @@ (at your option) any later version. if (status == MagickFalse) { image_error ("Imagemagick image rotate failed", Qnil, Qnil); + imagemagick_error (image_wand); goto imagemagick_error; } }