From 183851b06bd6c52f3cae5375f433da720d410447 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Wed, 11 Oct 2006 18:12:39 +0000 Subject: MediaWiki 1.7.1 wiederhergestellt --- includes/ImageFunctions.php | 223 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 223 insertions(+) create mode 100644 includes/ImageFunctions.php (limited to 'includes/ImageFunctions.php') diff --git a/includes/ImageFunctions.php b/includes/ImageFunctions.php new file mode 100644 index 00000000..a66b4d79 --- /dev/null +++ b/includes/ImageFunctions.php @@ -0,0 +1,223 @@ + 1.0, + 'pt' => 1.25, + 'pc' => 15.0, + 'mm' => 3.543307, + 'cm' => 35.43307, + 'in' => 90.0, + '' => 1.0, // "User units" pixels by default + '%' => 2.0, // Fake it! + ); + if( preg_match( '/^(\d+(?:\.\d+)?)(em|ex|px|pt|pc|cm|mm|in|%|)$/', $length, $matches ) ) { + $length = floatval( $matches[1] ); + $unit = $matches[2]; + return round( $length * $unitLength[$unit] ); + } else { + // Assume pixels + return round( floatval( $length ) ); + } +} + +/** + * Compatible with PHP getimagesize() + * @todo support gzipped SVGZ + * @todo check XML more carefully + * @todo sensible defaults + * + * @param $filename String: full name of the file (passed to php fopen()). + * @return array + */ +function wfGetSVGsize( $filename ) { + $width = 256; + $height = 256; + + // Read a chunk of the file + $f = fopen( $filename, "rt" ); + if( !$f ) return false; + $chunk = fread( $f, 4096 ); + fclose( $f ); + + // Uber-crappy hack! Run through a real XML parser. + if( !preg_match( '/]*)\s*>/s', $chunk, $matches ) ) { + return false; + } + $tag = $matches[1]; + if( preg_match( '/\bwidth\s*=\s*("[^"]+"|\'[^\']+\')/s', $tag, $matches ) ) { + $width = wfScaleSVGUnit( trim( substr( $matches[1], 1, -1 ) ) ); + } + if( preg_match( '/\bheight\s*=\s*("[^"]+"|\'[^\']+\')/s', $tag, $matches ) ) { + $height = wfScaleSVGUnit( trim( substr( $matches[1], 1, -1 ) ) ); + } + + return array( $width, $height, 'SVG', + "width=\"$width\" height=\"$height\"" ); +} + +/** + * Determine if an image exists on the 'bad image list'. + * + * @param $name String: the image name to check + * @return bool + */ +function wfIsBadImage( $name ) { + static $titleList = false; + wfProfileIn( __METHOD__ ); + $bad = false; + if( wfRunHooks( 'BadImage', array( $name, &$bad ) ) ) { + if( !$titleList ) { + # Build the list now + $titleList = array(); + $lines = explode( "\n", wfMsgForContent( 'bad_image_list' ) ); + foreach( $lines as $line ) { + if( preg_match( '/^\*\s*\[\[:?(.*?)\]\]/i', $line, $matches ) ) { + $title = Title::newFromText( $matches[1] ); + if( is_object( $title ) && $title->getNamespace() == NS_IMAGE ) + $titleList[ $title->getDBkey() ] = true; + } + } + } + wfProfileOut( __METHOD__ ); + return array_key_exists( $name, $titleList ); + } else { + wfProfileOut( __METHOD__ ); + return $bad; + } +} + +/** + * Calculate the largest thumbnail width for a given original file size + * such that the thumbnail's height is at most $maxHeight. + * @param $boxWidth Integer Width of the thumbnail box. + * @param $boxHeight Integer Height of the thumbnail box. + * @param $maxHeight Integer Maximum height expected for the thumbnail. + * @return Integer. + */ +function wfFitBoxWidth( $boxWidth, $boxHeight, $maxHeight ) { + $idealWidth = $boxWidth * $maxHeight / $boxHeight; + $roundedUp = ceil( $idealWidth ); + if( round( $roundedUp * $boxHeight / $boxWidth ) > $maxHeight ) + return floor( $idealWidth ); + else + return $roundedUp; +} + + +?> -- cgit v1.2.3-54-g00ecf