Hello community, here is the log from the commit of package perl-Image-Info for openSUSE:Factory checked in at 2019-10-23 15:54:14 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-Image-Info (Old) and /work/SRC/openSUSE:Factory/.perl-Image-Info.new.2352 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Image-Info" Wed Oct 23 15:54:14 2019 rev:14 rq:742102 version:1.42 Changes: -------- --- /work/SRC/openSUSE:Factory/perl-Image-Info/perl-Image-Info.changes 2017-07-17 09:12:38.095457194 +0200 +++ /work/SRC/openSUSE:Factory/.perl-Image-Info.new.2352/perl-Image-Info.changes 2019-10-23 15:54:21.378921992 +0200 @@ -1,0 +2,22 @@ +Mon Oct 21 14:35:53 UTC 2019 - <timueller+p...@suse.de> + +- updated to 1.42 + see /usr/share/doc/packages/perl-Image-Info/CHANGES + + 2019-10-19 Slaven Rezic <sla...@rezic.de> + + Release 1.42 + + Stable release with all changes in 1.41_50 + + 2019-10-16 Slaven Rezic <sla...@rezic.de> + + Release 1.41_50 + + Support for WEBP files (RT #130529) (by Nicolas Clark) + + Cease a warning (by H.Merijn Brand) + + Various minor test and CI polishing + +------------------------------------------------------------------- Old: ---- Image-Info-1.41.tar.gz New: ---- Image-Info-1.42.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-Image-Info.spec ++++++ --- /var/tmp/diff_new_pack.qJiHRw/_old 2019-10-23 15:54:22.402923099 +0200 +++ /var/tmp/diff_new_pack.qJiHRw/_new 2019-10-23 15:54:22.406923103 +0200 @@ -1,7 +1,7 @@ # # spec file for package perl-Image-Info # -# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -12,18 +12,18 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # Name: perl-Image-Info -Version: 1.41 +Version: 1.42 Release: 0 %define cpan_name Image-Info Summary: Extract meta information from image files -License: Artistic-1.0 or GPL-1.0+ +License: Artistic-1.0 OR GPL-1.0-or-later Group: Development/Libraries/Perl -Url: http://search.cpan.org/dist/Image-Info/ +Url: https://metacpan.org/release/%{cpan_name} Source0: https://cpan.metacpan.org/authors/id/S/SR/SREZIC/%{cpan_name}-%{version}.tar.gz Source1: cpanspec.yml BuildArch: noarch @@ -44,14 +44,14 @@ %prep %setup -q -n %{cpan_name}-%{version} -find . -type f ! -name \*.pl -print0 | xargs -0 chmod 644 +find . -type f ! -path "*/t/*" ! -name "*.pl" ! -name "*.sh" -print0 | xargs -0 chmod 644 %build -%{__perl} Makefile.PL INSTALLDIRS=vendor -%{__make} %{?_smp_mflags} +perl Makefile.PL INSTALLDIRS=vendor +make %{?_smp_mflags} %check -%{__make} test +make test %install %perl_make_install ++++++ Image-Info-1.41.tar.gz -> Image-Info-1.42.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Image-Info-1.41/CHANGES new/Image-Info-1.42/CHANGES --- old/Image-Info-1.41/CHANGES 2017-07-12 18:30:10.000000000 +0200 +++ new/Image-Info-1.42/CHANGES 2019-10-19 08:44:15.000000000 +0200 @@ -1,5 +1,21 @@ Revision history for Image::Info +2019-10-19 Slaven Rezic <sla...@rezic.de> + + Release 1.42 + + Stable release with all changes in 1.41_50 + +2019-10-16 Slaven Rezic <sla...@rezic.de> + + Release 1.41_50 + + Support for WEBP files (RT #130529) (by Nicolas Clark) + + Cease a warning (by H.Merijn Brand) + + Various minor test and CI polishing + 2017-07-12 Slaven Rezic <sla...@rezic.de> Release 1.41 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Image-Info-1.41/MANIFEST new/Image-Info-1.42/MANIFEST --- old/Image-Info-1.41/MANIFEST 2017-07-12 18:33:12.000000000 +0200 +++ new/Image-Info-1.42/MANIFEST 2019-10-19 08:45:38.000000000 +0200 @@ -4,6 +4,7 @@ dev/build.pl dev/Info.pm.tmpl Will become lib/Image/Info.pm exifdump Test driver script +img/anim.webp WebP animation img/bad-exif-1.jpg img/be.tif img/cynic_hang.jpg cycle in IFD's causing hangs in older than v1.25 @@ -32,6 +33,9 @@ img/test.svg img/test.tif img/test.wbmp +img/test.webp WebP lossy +img/test-exif.webp WebP "extended format" +img/test-lossless.webp WebP lossless img/test.xbm img/test.xpm img/test0-fuji.jpg Testcase for RT #49546 @@ -58,6 +62,7 @@ lib/Image/Info/SVG/XMLSimple.pm lib/Image/Info/TIFF.pm lib/Image/Info/WBMP.pm +lib/Image/Info/WEBP.pm lib/Image/Info/XBM.pm lib/Image/Info/XPM.pm lib/Image/TIFF.pm Parse TIFF tags @@ -84,6 +89,7 @@ t/tiff_segfault.t t/tiny-pgm.t t/wbmp.t +t/webp.t t/xbm.t t/xpm.t TODO diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Image-Info-1.41/META.json new/Image-Info-1.42/META.json --- old/Image-Info-1.41/META.json 2017-07-12 18:33:09.000000000 +0200 +++ new/Image-Info-1.42/META.json 2019-10-19 08:45:38.000000000 +0200 @@ -6,7 +6,7 @@ "Tels" ], "dynamic_config" : 1, - "generated_by" : "ExtUtils::MakeMaker version 6.6302, CPAN::Meta::Converter version 2.120630", + "generated_by" : "ExtUtils::MakeMaker version 6.98, CPAN::Meta::Converter version 2.142690", "license" : [ "perl_5" ], @@ -54,5 +54,5 @@ "url" : "git://github.com/eserte/image-info.git" } }, - "version" : "1.41" + "version" : "1.42" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Image-Info-1.41/META.yml new/Image-Info-1.42/META.yml --- old/Image-Info-1.41/META.yml 2017-07-12 18:33:08.000000000 +0200 +++ new/Image-Info-1.42/META.yml 2019-10-19 08:45:38.000000000 +0200 @@ -5,15 +5,15 @@ - 'Gisle Aas <gi...@activestate.com' - Tels build_requires: - ExtUtils::MakeMaker: 0 + ExtUtils::MakeMaker: '0' configure_requires: - ExtUtils::MakeMaker: 0 + ExtUtils::MakeMaker: '0' dynamic_config: 1 -generated_by: 'ExtUtils::MakeMaker version 6.6302, CPAN::Meta::Converter version 2.120630' +generated_by: 'ExtUtils::MakeMaker version 6.98, CPAN::Meta::Converter version 2.142690' license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html - version: 1.4 + version: '1.4' name: Image-Info no_index: directory: @@ -23,13 +23,13 @@ - img - xt recommends: - Bundle::Image::Info::PNG: 0 - Bundle::Image::Info::SVG: 0 - Bundle::Image::Info::XBM: 0 - Bundle::Image::Info::XPM: 0 + Bundle::Image::Info::PNG: '0' + Bundle::Image::Info::SVG: '0' + Bundle::Image::Info::XBM: '0' + Bundle::Image::Info::XPM: '0' requires: - IO::Scalar: 0 - perl: 5.006 + IO::Scalar: '0' + perl: '5.006' resources: repository: git://github.com/eserte/image-info.git -version: 1.41 +version: '1.42' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Image-Info-1.41/README new/Image-Info-1.42/README --- old/Image-Info-1.41/README 2009-11-22 20:06:39.000000000 +0100 +++ new/Image-Info-1.42/README 2019-10-16 20:58:09.000000000 +0200 @@ -8,6 +8,7 @@ SVG XBM/XPM BMP/DIB/RLE + WEBP Usage is something like this: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Image-Info-1.41/SIGNATURE new/Image-Info-1.42/SIGNATURE --- old/Image-Info-1.41/SIGNATURE 2017-07-12 18:33:16.000000000 +0200 +++ new/Image-Info-1.42/SIGNATURE 2019-10-19 08:45:40.000000000 +0200 @@ -1,5 +1,5 @@ This file contains message digests of all files listed in MANIFEST, -signed via the Module::Signature module, version 0.79. +signed via the Module::Signature module, version 0.73. To verify the content in this distribution, first make sure you have Module::Signature installed, then type: @@ -12,21 +12,22 @@ not run its Makefile.PL or Build.PL. -----BEGIN PGP SIGNED MESSAGE----- -Hash: SHA256 +Hash: SHA1 SHA1 c82d6187bf83f92dcd4a4ba9ab8341c3edcc094a .gitignore -SHA1 30179eb10d6d5b5f894cb424f2a592ce1b7f6a2d CHANGES +SHA1 e3115e22a27fdd5134a59970fbc5e7529a5ddf3e CHANGES SHA1 517bff80bcf518746150086148acaf8cfa37a17d CREDITS -SHA1 adb208ecc37e5a45556f6ae090c48780b4c0a1d4 MANIFEST +SHA1 5ca9bb45657728092eb1aa886e1e2b1826136c70 MANIFEST SHA1 7508fd127843a69e30ba4f58f4b4e769f20d49e2 MANIFEST.SKIP -SHA1 df5eecea3876ed09a9bc7edb43ed04baca247d8f META.json -SHA1 47d1b66847b5776a936651495c8b56eea79d2f43 META.yml +SHA1 30e7384a7dea93c40bd5f5dbb82dadc73e1302a8 META.json +SHA1 e46bc208078209dc13f72b8cd6e1b4a53dad5a9b META.yml SHA1 fd14642d591e132078fc91a8e54a4a4fed927f46 Makefile.PL -SHA1 0184503d850cb0d34d0cfe26bd5af84d4cf97dbc README +SHA1 2223f7e51619714199f2d5cc232b5aa0e514364f README SHA1 36ea8eabe5ac80acc416411aae77b60e1480de1b TODO -SHA1 b3990f7beb41b8f3f4bc5415b1bb2782a12c63d9 dev/Info.pm.tmpl +SHA1 d377efc30a865c1b5e811b383f7363abc92b1fb5 dev/Info.pm.tmpl SHA1 c11e7408bd16d35b2116ee47eaac4f08266be902 dev/build.pl SHA1 38b386e67725abff64ea00abb8e92c46f38e2f59 exifdump +SHA1 fdf710d6580548b5fe62be0fd9151bc196537c17 img/anim.webp SHA1 0e2ed058a8e6b748c639b08064f6782c4f51d643 img/bad-exif-1.jpg SHA1 c11f86df48ca57d0364c9afd1449683ebf1979f4 img/be.tif SHA1 951a303482fb78bc02c65e8310854a7be975bfca img/cynic_hang.jpg @@ -40,7 +41,9 @@ SHA1 5274644b89b81daafccd469ff024e9b22a677db1 img/no-thumbnail.jpg SHA1 acccfe940ec2abc5bb18787c212f1ba2340793a1 img/segfault.tif SHA1 2cda53a351b2c683e154e82caf843e3e630804f3 img/test-corruptchunk.jpg +SHA1 feb2bf35dbbcb5ce477fe946c17beea9f15aec21 img/test-exif.webp SHA1 feaec718770ec0de7fc1010827425eca5b268fb8 img/test-gimp.xbm +SHA1 1c06aac0845d63d93dc09ca3ab7a03a6b309a68a img/test-lossless.webp SHA1 1f561889c44c24dae57de74f65401ca7bc089a87 img/test-multi0xff.jpg SHA1 44e527641f2af0aadfb1dcc9a7f301f258d8f77d img/test-notrailer.gif SHA1 75da6beb9439bc07a0cd8537ce21689d560452da img/test-unknowncode.gif @@ -55,6 +58,7 @@ SHA1 b51c0ee17e88970b032f96026119d16ab667b686 img/test.svg SHA1 f345165b605868be0b843fe6f98e5243a449b7d4 img/test.tif SHA1 1cce96f5245e8ea5c13dccb34a44d73de8c4bc4a img/test.wbmp +SHA1 ebe53d208fc0fa62603bd87f412fc818a1e03c45 img/test.webp SHA1 8a8f9bfb0a791f01f5aeecb29d095bdb94b16d43 img/test.xbm SHA1 d7ead6bd7acf3aa703424697913c5a0e9c2e9244 img/test.xpm SHA1 2d2565cc6074fc831924dd378a4a579415505cfb img/test0-fuji.jpg @@ -69,7 +73,7 @@ SHA1 e6fe98aa5a30dbd290668cffa515aebaf14828fa lib/Bundle/Image/Info/SVG.pm SHA1 fa3a601365ec108901e991a8148b62c2bf3dd62b lib/Bundle/Image/Info/XBM.pm SHA1 7ae5950ba4474e8099068ca6122e67cadce60842 lib/Bundle/Image/Info/XPM.pm -SHA1 ebc888ef584605a606ed8d8b6cdf2ce1ec30e295 lib/Image/Info.pm +SHA1 231dd1bff79a57b155571eb5b0b604616a890ed0 lib/Image/Info.pm SHA1 6991a957bacde9d3b873184d90d910d083f5f403 lib/Image/Info/BMP.pm SHA1 0996bffe073126dceb72c04dc5b3002c78c24d56 lib/Image/Info/GIF.pm SHA1 fb628cb66c566ab66a1b7953a1bb29cfde1c79c7 lib/Image/Info/ICO.pm @@ -81,9 +85,10 @@ SHA1 c1fe64b6ad5faeeab7d690cd44fd0feaf56952ee lib/Image/Info/SVG/XMLSimple.pm SHA1 04be3e8792943ab9b61dcdc89e1f31b70dc60996 lib/Image/Info/TIFF.pm SHA1 ed6fde11752d6450756c815b2dca25f9ad1740d9 lib/Image/Info/WBMP.pm +SHA1 d4a5013ec81db219edd32f273d1be370b5cda9fd lib/Image/Info/WEBP.pm SHA1 5c896ca4cc89715527f4207bae3c1e3c7a26286a lib/Image/Info/XBM.pm SHA1 4a5050fdcef00704e7d1fa2ae8751aa34a866f63 lib/Image/Info/XPM.pm -SHA1 b8da0421ddd3592facd16fdd851eaf78a6f017fe lib/Image/TIFF.pm +SHA1 e87d3595864dcd02e59c86fc6e8aa50fb7a283d1 lib/Image/TIFF.pm SHA1 34e6def40374dc924ea7ef58c5aa04e04a783295 t/00_basics.t SHA1 38883a0d98f01e4e749168369848f3ab5b5c7660 t/bad_exif.t SHA1 aaf002b3e5103e15dad27d59bbf2ce7d84caf79e t/bmp.t @@ -93,16 +98,17 @@ SHA1 ba1cf7c01b0de6f449a90815bf7db5a3b1645e3d t/jpg_corruptchunk.t SHA1 3443c36fd2dbc7f58599cf175e0793c5e8601ea9 t/jpg_hang.t SHA1 026bdd691c1971289451e147b8ecf1c99463e74d t/jpg_ignore_thumbnail.t -SHA1 bbc65b35f47f361eeac8ba0e0da8fb0c645aa18c t/png.t +SHA1 79380e179b840468bef4ab231f1bc7ac93081ed2 t/png.t SHA1 cc217a37ee14356bb57e4ea32c1eda94d1a2d8c9 t/pod.t SHA1 ddac1596c132f80e81355cc048def2733163a9aa t/pod_cov.t SHA1 710bb49a5428b9b0301ec451f8d869b58937b746 t/string.t -SHA1 4d729b6d3f3d747a817657053b03f6deb0ce2de4 t/svg.t +SHA1 2cf4f2b872c4217539c325173110d196ea7c3070 t/svg.t SHA1 1e8a42e9b7d911936853446ef907f8f74072d08f t/tiff.t SHA1 76e7e08522799dc0f39896c8925aff1d42b09da4 t/tiff_e.t SHA1 c08bf003a891603d6f5f098425a70680a699e31a t/tiff_segfault.t SHA1 0a5f7c518af4b72fd76fa8def1f51e8691727bdd t/tiny-pgm.t SHA1 7d7708b0392491f75eb9b68289469c1a488453ca t/wbmp.t +SHA1 8f93c43d2d328e2ed79b8bbf817cc073d491a53f t/webp.t SHA1 cea87cb4a68f31dd245d911d0c43b581939c3f34 t/xbm.t SHA1 982933644977d3879d1b2a269bdfb1ef45723481 t/xpm.t SHA1 4396e44dfbfe4c2ff26d115bc0eadbce507b7bf0 xt/kwalitee.t @@ -112,11 +118,11 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 -iQEcBAEBCAAGBQJZZk9JAAoJEN1GkmBlfE8/bVkH/iq2dcpdzLXrlH6y8uaEkQbO -i2Hu0TgUCwMo1yBHVxJlzfp3JmGfeBSWkjuYCg1PpF77mxdhwpxUw+NhB4fh+CxF -aRLfGo0a7qdOgPXGEOQ9FuWKC9Bf7/iXs2U43E8tFpTjFUjLF84uVrh+Vi7oBo0R -qaE+MqiyQK+23NkEmAi1e8tXXBimDkMXpbioSrpDLn2hIjk7Xrv0zlXR/2zJ4n68 -dVpEWoKk7r/63Yr/p/GvHtBm52BBOTBdAP0j6RsGrNyRzoa/mQXMWoQS3nYB7pVO -dEFWQypyu4bxij4rRg9pEJcEEwrGWff7EGGn+7R7iWByPCOqf1SU5EaJ8K+m3Ok= -=vN3K +iQEcBAEBAgAGBQJdqrESAAoJEN1GkmBlfE8/+O8H/3p3MDZNqc91mqBBEExjwDPv +ifXolC7lea2ZXn5s6i3VJArYmCD7a1g3SCCxJnN0IXfQirNWgjTuX4k3+PVRX57p +ce7zpGNxhklprIkdlJd077SSnTVcyzcoJKZ4Ym3bW4GrPotrco/FfDCuADoOwhmw +DcfID/PEcvGLi6cRH1soaTHlhiNhmI4xfeCe7V0IF+Cz2v3XhSIiKh4AFaa2dZkZ +9qOWZ6BgnHK5m2aQhZNvhiHfdWLoWxS243VcZ9IjEi9FLmN78FmbSag+zZ4FAgsZ +90wosyPcs0i41u8gsnpN434yJkWqOYDeh9S567g/YzEZi3uQoD/7RGJoCm0mTy0= +=T0QP -----END PGP SIGNATURE----- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Image-Info-1.41/dev/Info.pm.tmpl new/Image-Info-1.42/dev/Info.pm.tmpl --- old/Image-Info-1.41/dev/Info.pm.tmpl 2017-07-12 18:27:44.000000000 +0200 +++ new/Image-Info-1.42/dev/Info.pm.tmpl 2019-10-19 08:44:31.000000000 +0200 @@ -13,12 +13,12 @@ # modify it under the same terms as Perl v5.8.8 itself. # # Previously maintained by Tels - (c) 2006 - 2008. -# Currently maintained by Slaven Rezic - (c) 2008 - 2017. +# Currently maintained by Slaven Rezic - (c) 2008 - 2019. use strict; use vars qw($VERSION @EXPORT_OK); -$VERSION = '1.41'; +$VERSION = '1.42'; require Exporter; *import = \&Exporter::import; Binary files old/Image-Info-1.41/img/anim.webp and new/Image-Info-1.42/img/anim.webp differ Binary files old/Image-Info-1.41/img/test-exif.webp and new/Image-Info-1.42/img/test-exif.webp differ Binary files old/Image-Info-1.41/img/test-lossless.webp and new/Image-Info-1.42/img/test-lossless.webp differ Binary files old/Image-Info-1.41/img/test.webp and new/Image-Info-1.42/img/test.webp differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Image-Info-1.41/lib/Image/Info/WEBP.pm new/Image-Info-1.42/lib/Image/Info/WEBP.pm --- old/Image-Info-1.41/lib/Image/Info/WEBP.pm 1970-01-01 01:00:00.000000000 +0100 +++ new/Image-Info-1.42/lib/Image/Info/WEBP.pm 2019-10-16 20:58:09.000000000 +0200 @@ -0,0 +1,164 @@ +# -*- perl -*- + +# +# Copyright (C) 2019 Preisvergleich Internet Services AG. All rights reserved. +# This package is free software; you can redistribute it and/or +# modify it under the same terms as Perl itself. +# + +# File magic is +# R I F F +# length (4 bytes) +# WEPB + +=begin register + +MAGIC: /^RIFF.{4}WEBP/s + +VP8 (lossy), VP8L (lossless) and VP8X (extended) files are supported. +Sets the key C<Animation> to true if the file is an animation. Otherwise +sets the key C<Compression> to either C<VP8> or C<Lossless>. + +=end register + +=cut + +package Image::Info::WEBP; + +use strict; +use warnings; + +use vars qw($VERSION); +$VERSION = '0.01'; + +sub my_read +{ + my($source, $len) = @_; + my $buf; + my $n = read($source, $buf, $len); + die "read failed: $!" unless defined $n; + die "short read ($len/$n) at pos " . tell($source) unless $n == $len; + $buf; +} + +my @upscale = (1, 5/4, 5/3, 2); + +sub process_file +{ + my($info, $fh) = @_; + + my $signature = my_read($fh, 16); + die "Bad WEBP signature" + unless $signature =~ /\ARIFF....WEBPVP8([ LX])/s; + + my $type = $1; + + $info->push_info(0, "file_media_type" => "image/webp"); + $info->push_info(0, "file_ext" => "webp"); + + # This code is (arguably) 4 bytes out of sync with the description in the + # spec, because the spec describes ChunkHeader('ABCD') as an 8-byte quantity + # and we've processed the first 4 bytes above, but need to handle the second + # 4 (the length) here: + if ($type eq 'X') { + # 32 bits of length + # 8 bits of flags + # 24 bits reserved + # 24 bits canvas width + # 24 bits canvas height + # and then chunks... + my ($length, $flags, $raw_width, $raw_height) + = unpack 'VVVv', my_read($fh, 14); + # Of the 14 bytes now read, 10 were included in length: + $length -= 10; + die sprintf "Bad WEBP VP8X reserved bits 0x%02X", $flags & 0xC1 + if $flags & 0xC1; + die sprintf "Bad WEBP VP8X reserved bits 0x%06X", $flags >> 8 + if $flags >> 8; + + # Shuffle the 24 bit values into shape: + $raw_height = ($raw_height << 8) | ($raw_width >> 24); + $raw_width &= 0xFFFFFF; + # Strictly this is the canvas width/height, not that of the first frame. + # But 1 image, that might be animated. Hence it doesn't quite map to the + # "$n images in a file" model that Image::Info::GIF provides. + + $info->push_info(0, "width", 1 + $raw_width); + $info->push_info(0, "height", 1 + $raw_height); + + if ($flags & 0x02) { + $info->push_info(0, "Animation", 1); + } else { + # Possibly could also handle EXIF chunks here, although it's unclear + # how much code that should share with + # Image::Info::JPEG::process_app1_exif(), as that seems to have both + # JPEG-specific logic, and more generic EXIF logic. + + while (1) { + # Spec says that length is actual length, without accounting for + # padding. Odd sizes are padded to the next even size: + ++$length + if $length & 1; + die "seek failed: $!" + unless seek $fh, $length, 1; + my $buf; + my $n = read $fh, $buf, 8; + die "read failed: $!" unless defined $n; + die "No VP8 or VP8L chunk found in WEPB Extended File Format" + if $n == 0; + die "short read (8/$n) at pos " . tell $fh + unless $n == 8; + (my $chunk, $length) = unpack "a4V", $buf; + if ($chunk eq 'VP8 ') { + $info->push_info(0, "Compression", "VP8"); + last; + } elsif ($chunk eq 'VP8L') { + $info->push_info(0, "Compression", "Lossless"); + last; + } + } + } + } elsif ($type eq 'L') { + # There doesn't seem to be a better name for this: + $info->push_info(0, "Compression", "Lossless"); + # Discard the 4 bytes of length; grab the next 5. + my ($sig, $size_and_flags) = unpack "x4CV", my_read($fh, 9); + die sprintf "Bad WEBP Lossless signature 0x%02X", $sig + unless $sig == 0x2f; + my $version = $size_and_flags >> 30; + die "Bad WEBP Lossless version $sig" + unless $version == 0; + $info->push_info(0, "width", 1 + $size_and_flags & 0x3FFF); + $info->push_info(0, "height", 1 + ($size_and_flags >> 14) & 0x3FFF); + } else { + $info->push_info(0, "Compression", "VP8"); + # The fun format for a key frame is + # 32 bits of length + # 24 bits of frame tag + # 3 signature bytes + # 2+14 bits of width + # 2+14 bits of height + # We don't have a pack format for 3 bytes, but the bits we need can be + # got by approximating it as 2, 4, 2, 2: + my ($type, $start, $raw_horiz, $raw_vert) + = unpack "x4vVvv", my_read($fh, 14); + die "Bad WEBP VP8 type 1 (ie interframe)" + if $type & 1; + $start >>= 8; + die sprintf "Bad WEBP VP8 key frame start signature 0x%06X", $start + unless $start == 0x2a019d; + + # The top two bits of the raw width and height values are used as to + # flag a ratio to upscale. + # However, testing against dwebp and webpmux and then re-checking the + # documentation, it seems that these are really intended as information + # for the video hardware to render the image, because they don't change + # the size of bitmap returned from the decoder library. So return them + # as extra information, but don't recalculate the width and height. + $info->push_info(0, "width", ($raw_horiz & 0x3FFF)); + $info->push_info(0, "height", ($raw_vert & 0x3FFF)); + $info->push_info(0, "Width_Upscale", $upscale[$raw_horiz >> 14]); + $info->push_info(0, "Height_Upscale", $upscale[$raw_vert >> 14]); + + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Image-Info-1.41/lib/Image/Info.pm new/Image-Info-1.42/lib/Image/Info.pm --- old/Image-Info-1.41/lib/Image/Info.pm 2017-07-12 18:30:56.000000000 +0200 +++ new/Image-Info-1.42/lib/Image/Info.pm 2019-10-19 08:45:16.000000000 +0200 @@ -13,12 +13,12 @@ # modify it under the same terms as Perl v5.8.8 itself. # # Previously maintained by Tels - (c) 2006 - 2008. -# Currently maintained by Slaven Rezic - (c) 2008 - 2017. +# Currently maintained by Slaven Rezic - (c) 2008 - 2019. use strict; use vars qw($VERSION @EXPORT_OK); -$VERSION = '1.41'; +$VERSION = '1.42'; require Exporter; *import = \&Exporter::import; @@ -176,6 +176,7 @@ return "XPM" if /(^\/\* XPM \*\/)|(static\s+char\s+\*\w+\[\]\s*=\s*{\s*"\d+)/; return "XBM" if /^(?:\/\*.*\*\/\n)?#define\s/; return "SVG" if /^(<\?xml|[\012\015\t ]*<svg\b)/; + return "WEBP" if /^RIFF.{4}WEBP/s; return undef; } @@ -531,6 +532,12 @@ wbmp files have no magic, so cannot be used with the normal Image::Info functions. See L<Image::Info::WBMP> for more information. +=item WEBP + +VP8 (lossy), VP8L (lossless) and VP8X (extended) files are supported. +Sets the key C<Animation> to true if the file is an animation. Otherwise +sets the key C<Compression> to either C<VP8> or C<Lossless>. + =item XBM See L<Image::Info::XBM> for details. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Image-Info-1.41/lib/Image/TIFF.pm new/Image-Info-1.42/lib/Image/TIFF.pm --- old/Image-Info-1.41/lib/Image/TIFF.pm 2014-12-20 00:06:38.000000000 +0100 +++ new/Image-Info-1.42/lib/Image/TIFF.pm 2019-10-16 21:08:43.000000000 +0200 @@ -9,7 +9,7 @@ use strict; use vars qw($VERSION); -$VERSION = '1.09'; +$VERSION = '1.10'; my @types = ( [ "BYTE", "C1", 1], @@ -966,7 +966,7 @@ $maker =~ /^([A-Z]+)/; $maker = $1 || ''; # "OLYMPUS ..." > "OLYMPUS" # if 'Panasonic' doesn't exist, try 'Panasonic DMC-FZ5' - $maker = $self->{Make}.' '.$self->{Model} + $maker = join " " => grep m/\S/ => $self->{Make}, $self->{Model} unless exists $makernotes{$maker}; if (exists $makernotes{$maker}) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Image-Info-1.41/t/png.t new/Image-Info-1.42/t/png.t --- old/Image-Info-1.41/t/png.t 2017-06-30 19:13:59.000000000 +0200 +++ new/Image-Info-1.42/t/png.t 2017-12-30 12:44:37.000000000 +0100 @@ -65,7 +65,7 @@ # itxt tests SKIP: { - skip 'Need Encode for this itxt test', 2 + skip 'Need Encode for this itxt test', 3 if !eval { require Encode; 1 }; # test files generated with pngcrush, which actually honours the spec: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Image-Info-1.41/t/svg.t new/Image-Info-1.42/t/svg.t --- old/Image-Info-1.41/t/svg.t 2011-12-28 22:46:25.000000000 +0100 +++ new/Image-Info-1.42/t/svg.t 2017-12-30 12:44:37.000000000 +0100 @@ -29,6 +29,11 @@ no warnings 'once'; diag "Using SVG module $Image::Info::SVG::USING_MODULE"; diag "XML::Simple $XML::Simple::VERSION" if defined $XML::Simple::VERSION; + if (defined $XML::SAX::ParserPackage) { + no strict 'refs'; + my $ver = ${ $XML::SAX::ParserPackage . "::VERSION" }; + diag "XML::SAX::ParserPackage $XML::SAX::ParserPackage $ver"; + } diag "XML::LibXML::Reader $XML::LibXML::Reader::VERSION" if defined $XML::LibXML::Reader::VERSION; diag "Compiled against libxml2 version: " . XML::LibXML::LIBXML_VERSION() if defined &XML::LibXML::LIBXML_VERSION; diag "Running libxml2 version: " . XML::LibXML::LIBXML_RUNTIME_VERSION() if defined &XML::LibXML::LIBXML_VERSION; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Image-Info-1.41/t/webp.t new/Image-Info-1.42/t/webp.t --- old/Image-Info-1.41/t/webp.t 1970-01-01 01:00:00.000000000 +0100 +++ new/Image-Info-1.42/t/webp.t 2019-10-16 20:58:09.000000000 +0200 @@ -0,0 +1,50 @@ +#!/usr/bin/perl -w + +use strict; +use FindBin; +use Test::More; + +use Image::Info qw(image_info); + +plan tests => 21; + +my $img_dir = "$FindBin::RealBin/../img"; + +my $i = image_info("$img_dir/test.webp") || + die ("Couldn't read test.webp: $!"); + +is ($i->{file_ext}, 'webp', 'WebP'); +is ($i->{file_media_type}, 'image/webp', 'media_type'); +is ($i->{Compression}, 'VP8', 'lossy compression'); +is ($i->{width}, 320, 'width'); +is ($i->{height}, 240, 'height'); + +$i = image_info("$img_dir/test-lossless.webp") || + die ("Couldn't read test-lossless.webp: $!"); + +is ($i->{file_ext}, 'webp', 'WebP'); +is ($i->{file_media_type}, 'image/webp', 'media_type'); +is ($i->{Compression}, 'Lossless', 'lossless compression'); +is ($i->{width}, 150, 'width'); +is ($i->{height}, 113, 'height'); + +$i = image_info("$img_dir/test-exif.webp") || + die ("Couldn't read test-exif.webp: $!"); + +is ($i->{file_ext}, 'webp', 'WebP'); +is ($i->{file_media_type}, 'image/webp', 'media_type'); +is ($i->{Compression}, 'VP8', 'lossy compression'); +is ($i->{width}, 320, 'width'); +is ($i->{height}, 240, 'height'); + +# Note that this file has a length header where one octet is 0x0A, meaning that +# it will fail the file magic test if the //s flag is removed from the regex. +$i = image_info("$img_dir/anim.webp") || + die ("Couldn't read test-exif.webp: $!"); + +is ($i->{file_ext}, 'webp', 'WebP'); +is ($i->{file_media_type}, 'image/webp', 'media_type'); +is ($i->{Animation}, 1, 'animation'); +is ($i->{Compression}, undef, 'no compression given for animations'); +is ($i->{width}, 1, 'width'); +is ($i->{height}, 1, 'height');