3 * Handler for PNG images.
10 * Handler for PNG images.
14 class PNGHandler
extends BitmapHandler
{
16 const BROKEN_FILE
= '0';
21 * @param string $filename
24 function getMetadata( $image, $filename ) {
26 $metadata = BitmapMetadataHandler
::PNG( $filename );
27 } catch( Exception
$e ) {
29 wfDebug( __METHOD__
. ': ' . $e->getMessage() . "\n" );
30 return self
::BROKEN_FILE
;
33 return serialize($metadata);
36 function formatMetadata( $image ) {
37 $meta = $image->getMetadata();
42 $meta = unserialize( $meta );
43 if ( !isset( $meta['metadata'] ) ||
count( $meta['metadata'] ) <= 1 ) {
47 if ( isset( $meta['metadata']['_MW_PNG_VERSION'] ) ) {
48 unset( $meta['metadata']['_MW_PNG_VERSION'] );
50 return $this->formatMetadataHelper( $meta['metadata'] );
57 function isAnimatedImage( $image ) {
58 $ser = $image->getMetadata();
60 $metadata = unserialize($ser);
61 if( $metadata['frameCount'] > 1 ) return true;
66 function getMetadataType( $image ) {
70 function isMetadataValid( $image, $metadata ) {
72 if ( $metadata === self
::BROKEN_FILE
) {
73 // Do not repetitivly regenerate metadata on broken file.
74 return self
::METADATA_GOOD
;
78 $data = unserialize( $metadata );
81 if ( !$data ||
!is_array( $data ) ) {
82 wfDebug(__METHOD__
. ' invalid png metadata' );
83 return self
::METADATA_BAD
;
86 if ( !isset( $data['metadata']['_MW_PNG_VERSION'] )
87 ||
$data['metadata']['_MW_PNG_VERSION'] != PNGMetadataExtractor
::VERSION
) {
88 wfDebug(__METHOD__
. ' old but compatible png metadata' );
89 return self
::METADATA_COMPATIBLE
;
91 return self
::METADATA_GOOD
;
98 function getLongDesc( $image ) {
100 $original = parent
::getLongDesc( $image );
102 wfSuppressWarnings();
103 $metadata = unserialize($image->getMetadata());
106 if( !$metadata ||
$metadata['frameCount'] <= 0 )
112 if ( $metadata['loopCount'] == 0 ) {
113 $info[] = wfMsgExt( 'file-info-png-looped', 'parseinline' );
114 } elseif ( $metadata['loopCount'] > 1 ) {
115 $info[] = wfMsgExt( 'file-info-png-repeat', 'parseinline', $metadata['loopCount'] );
118 if ( $metadata['frameCount'] > 0 ) {
119 $info[] = wfMsgExt( 'file-info-png-frames', 'parseinline', $metadata['frameCount'] );
122 if ( $metadata['duration'] ) {
123 $info[] = $wgLang->formatTimePeriod( $metadata['duration'] );
126 return $wgLang->commaList( $info );