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