[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Image metadata
From: |
joakim |
Subject: |
Re: Image metadata |
Date: |
Fri, 02 Apr 2010 23:51:59 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.1.90 (gnu/linux) |
Juri Linkov <address@hidden> writes:
>>> The problem is that one part of the current `image-extension-data'
>>> is metadata, and another part is extension data. For instance, in
>>
>>> (count 44
>>> 255 "NETSCAPE2.0"
>>> 0 "address@hidden@"
>>> 249 "address@hidden"
>>> )
>>
>>> `count 44' is metadata, and the rest (with non-descriptive numeric keys)
>>> is extension data.
>>
>> Not knowing what is "extension data", I don't know if I agree.
>
>>From the API's point of view, "extension data" is just raw data fetched
> from the `ExtensionBlocks' slot of the GIF metadata. So really it's not
> important what it is as long as slot names basically coincide in the GIF
> structure and in its Lisp image metadata.
>
> I believe this patch cleans up the naming mess:
This does indeed seem clearer. Will this be commited?
If so I would try to use this api in the imagemagick patch.
For instance, it seems I can use MagickGetNumberImages() to
get the 'count property for multifile image archives.
>
> === modified file 'lisp/image.el'
> --- lisp/image.el 2010-03-11 20:01:33 +0000
> +++ lisp/image.el 2010-03-30 22:28:18 +0000
> @@ -681,8 +681,9 @@ (defun image-animated-p (image)
> shall be displayed."
> (cond
> ((eq (plist-get (cdr image) :type) 'gif)
> - (let* ((extdata (image-extension-data image))
> - (images (plist-get extdata 'count))
> + (let* ((metadata (image-metadata image))
> + (images (plist-get metadata 'count))
> + (extdata (plist-get metadata 'extension-data))
> (anim (plist-get extdata #xF9)))
> (and (integerp images) (> images 1)
> (stringp anim) (>= (length anim) 4)
>
> === modified file 'src/image.c'
> --- src/image.c 2010-01-24 23:03:13 +0000
> +++ src/image.c 2010-03-30 22:31:57 +0000
> @@ -604,7 +604,7 @@ (at your option) any later version.
> extern Lisp_Object QCwidth, QCheight, QCforeground, QCbackground, QCfile;
> extern Lisp_Object QCdata, QCtype;
> extern Lisp_Object Qcenter;
> -Lisp_Object QCascent, QCmargin, QCrelief, Qcount;
> +Lisp_Object QCascent, QCmargin, QCrelief, Qcount, Qextension_data;
> Lisp_Object QCconversion, QCcolor_symbols, QCheuristic_mask;
> Lisp_Object QCindex, QCmatrix, QCcolor_adjustment, QCmask;
>
> @@ -1011,8 +1011,8 @@ (at your option) any later version.
> return mask;
> }
>
> -DEFUN ("image-extension-data", Fimage_extension_data, Simage_extension_data,
> 1, 2, 0,
> - doc: /* Return extension data for image SPEC.
> +DEFUN ("image-metadata", Fimage_metadata, Simage_metadata, 1, 2, 0,
> + doc: /* Return metadata for image SPEC.
> FRAME is the frame on which the image will be displayed. FRAME nil
> or omitted means use the selected frame. */)
> (spec, frame)
> @@ -7169,7 +7169,7 @@ (at your option) any later version.
> struct frame *f;
> struct image *img;
> {
> - /* IMG->data.ptr_val may contain extension data. */
> + /* IMG->data.ptr_val may contain metadata with extension data. */
> img->data.lisp_val = Qnil;
> x_clear_image (f, img);
> }
> @@ -7488,8 +7488,8 @@ (at your option) any later version.
> }
> }
>
> - /* Save GIF image extension data for `image-extension-data'.
> - Format is (count IMAGES FUNCTION "BYTES" ...). */
> + /* Save GIF image extension data for `image-metadata'.
> + Format is (count IMAGES extension-data (FUNCTION "BYTES" ...)). */
> img->data.lisp_val = Qnil;
> if (gif->SavedImages[ino].ExtensionBlockCount > 0)
> {
> @@ -7499,7 +7499,9 @@ (at your option) any later version.
> img->data.lisp_val = Fcons (make_unibyte_string (ext->Bytes,
> ext->ByteCount),
> Fcons (make_number (ext->Function),
> img->data.lisp_val));
> - img->data.lisp_val = Fnreverse (img->data.lisp_val);
> + img->data.lisp_val = Fcons (Qextension_data,
> + Fcons (Fnreverse (img->data.lisp_val),
> + Qnil));
> }
> if (gif->ImageCount > 1)
> img->data.lisp_val = Fcons (Qcount,
> @@ -8403,6 +8405,8 @@ (at your option) any later version.
>
> Qcount = intern_c_string ("count");
> staticpro (&Qcount);
> + Qextension_data = intern_c_string ("extension-data");
> + staticpro (&Qextension_data);
>
> QCascent = intern_c_string (":ascent");
> staticpro (&QCascent);
> @@ -8498,7 +8502,7 @@ (at your option) any later version.
> defsubr (&Simage_refresh);
> defsubr (&Simage_size);
> defsubr (&Simage_mask_p);
> - defsubr (&Simage_extension_data);
> + defsubr (&Simage_metadata);
>
> #if GLYPH_DEBUG
> defsubr (&Simagep);
--
Joakim Verona
- Re: Image metadata,
joakim <=