http://www.mediawiki.org/wiki/Special:Code/MediaWiki/72371

Revision: 72371
Author:   daniel
Date:     2010-09-04 12:48:49 +0000 (Sat, 04 Sep 2010)

Log Message:
-----------
replacement for r72279: ignore extra IFDs reported by tiffinfo

Modified Paths:
--------------
    trunk/extensions/PagedTiffHandler/PagedTiffHandler.image.php
    trunk/extensions/PagedTiffHandler/PagedTiffHandler.php

Modified: trunk/extensions/PagedTiffHandler/PagedTiffHandler.image.php
===================================================================
--- trunk/extensions/PagedTiffHandler/PagedTiffHandler.image.php        
2010-09-04 12:22:37 UTC (rev 72370)
+++ trunk/extensions/PagedTiffHandler/PagedTiffHandler.image.php        
2010-09-04 12:48:49 UTC (rev 72371)
@@ -196,15 +196,17 @@
                        } 
                }
 
-               $prevPage = max($prevPage, $entry['page']);
+               if ( isset( $entry['width'] ) && isset( $entry['height'] ) ) {
+                       $prevPage = max($prevPage, $entry['page']);
 
-               if ( !isset( $entry['alpha'] ) ) {
-                       $entry['alpha'] = 'false';
+                       if ( !isset( $entry['alpha'] ) ) {
+                               $entry['alpha'] = 'false';
+                       }
+
+                       $entry['pixels'] = $entry['height'] * $entry['width'];
+                       $metadata['page_data'][$entry['page']] = $entry;
                }
 
-               $entry['pixels'] = $entry['height'] * $entry['width'];
-               $metadata['page_data'][$entry['page']] = $entry;
-
                $entry = array();
                return true;
        }
@@ -222,8 +224,10 @@
                $data = array();
                $data['page_data'] = array();
 
+               $ignoreIFDs = array();
                $entry = array();
 
+               $ignore = false;
                $prevPage = 0;
 
                foreach ( $rows as $row ) {
@@ -245,14 +249,19 @@
 
                        if ( $error ) continue;
 
-                       if ( preg_match('/^TIFF Directory at/', $row) ) {
-                               if ( $entry ) {
+                       if ( preg_match('/^TIFF Directory at offset 0x[a-f0-9]+ 
\((\d+)\)/', $row, $m) ) {
+                               if ( $ignore ) {
+                                       $entry = array();
+                               } else if ( $entry ) {
                                        $ok = $this->addPageEntry($entry, 
$data, $prevPage);
                                        if ( !$ok ) {
                                                $error = true;
                                                continue;
                                        }
                                }
+
+                               $ofs = (int)$m[1];
+                               $ignore = !empty( $ignoreIFDs[ $ofs ] );
                        } else if ( preg_match('#^(TIFF.*?Directory): 
(.*?/.*?): (.*)#i', $row, $m) ) {
                                $bypass = false; 
                                $msg = $m[3];
@@ -282,6 +291,11 @@
                                        $entry['width'] = (int)$value;
                                } else if ( $key == 'Image Length' || $key == 
'PixelYDimension' ) {
                                        $entry['height'] = (int)$value;
+                               } else if ( preg_match('/.*IFDOffset/', $key) ) 
{
+                                       # ignore extra IFDs, see 
<http://www.awaresystems.be/imaging/tiff/tifftags/exififd.html>
+                                       # Note: we assume that we will always 
see the reference before the actual IFD, so we know which IFDs to ignore
+                                       $ofs = (int)$value;
+                                       $ignoreIFDs[$ofs] = true;
                                }
                        } else {
                                // strange line
@@ -289,7 +303,7 @@
 
                }
 
-               if ( $entry ) {
+               if ( $entry && !$ignore ) {
                        $ok = $this->addPageEntry($entry, $data, $prevPage);
                }
 

Modified: trunk/extensions/PagedTiffHandler/PagedTiffHandler.php
===================================================================
--- trunk/extensions/PagedTiffHandler/PagedTiffHandler.php      2010-09-04 
12:22:37 UTC (rev 72370)
+++ trunk/extensions/PagedTiffHandler/PagedTiffHandler.php      2010-09-04 
12:48:49 UTC (rev 72371)
@@ -126,6 +126,8 @@
 define('TIFF_METADATA_VERSION', '1.1');
 # 1.0: initial
 # 1.1: fixed bugs in imageinfo parser
+# 1.2: photoshop quirks (reverted)
+# 1.3: handing extra IDFs reported by tiffinfo
 
 //$wgHooks['PagedTiffHandlerRenderCommand'][] = 
'PagedTiffHandler::renderCommand';
 //$wgHooks['PagedTiffHandlerTiffData'][] = 'PagedTiffImage::tiffData';



_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to