Page MenuHomePhabricator

mediawiki_pngscale.patch

Authored By
bzimport
Nov 21 2014, 9:39 PM
Size
4 KB
Referenced Files
None
Subscribers
None

mediawiki_pngscale.patch

Index: includes/media/Bitmap.php
===================================================================
--- includes/media/Bitmap.php (revision 95588)
+++ includes/media/Bitmap.php (working copy)
@@ -126,6 +126,7 @@
'mimeType' => $image->getMimeType(),
'srcPath' => $image->getPath(),
'dstPath' => $dstPath,
+ 'ext' => strtolower(substr( $image->getPath(), strrpos( $image->getPath(), '.' ) + 1 )),
'dstUrl' => $dstUrl,
);
@@ -141,7 +142,7 @@
}
# Determine scaler type
- $scaler = self::getScalerType( $dstPath );
+ $scaler = self::getScalerType( $scalerParams['ext'], $dstPath );
wfDebug( __METHOD__ . ": scaler $scaler\n" );
if ( $scaler == 'client' ) {
@@ -181,6 +182,9 @@
case 'custom':
$err = $this->transformCustom( $image, $scalerParams );
break;
+ case 'customext':
+ $err = $this->transformCustomExt( $image, $scalerParams );
+ break;
case 'imext':
$err = $this->transformImageMagickExt( $image, $scalerParams );
break;
@@ -213,12 +217,14 @@
*
* @return string client,im,custom,gd
*/
- protected static function getScalerType( $dstPath, $checkDstPath = true ) {
- global $wgUseImageResize, $wgUseImageMagick, $wgCustomConvertCommand;
+ protected static function getScalerType( $ext, $dstPath, $checkDstPath = true ) {
+ global $wgUseImageResize, $wgUseImageMagick, $wgCustomConvertCommand, $wgCustomConvertCommandsByExtension;
if ( !$dstPath && $checkDstPath ) {
# No output path available, client side scaling only
$scaler = 'client';
+ } elseif (array_key_exists($ext, $wgCustomConvertCommandsByExtension)) {
+ $scaler = 'customext';
} elseif ( !$wgUseImageResize ) {
$scaler = 'client';
} elseif ( $wgUseImageMagick ) {
@@ -429,21 +435,19 @@
}
/**
- * Transform an image using a custom command
+ * Invoke an external image transformation command line on a given file, replacing
+ * %s by the source file path, %d by the destination file path, $w by the width,
+ * and %h by the height.
*
- * @param $image File File associated with this thumbnail
+ * @param $cmd string Command line, containing %s, %d, %w, and %h codes.
* @param $params array Array with scaler params
*
* @return MediaTransformError Error object if error occured, false (=no error) otherwise
*/
- protected function transformCustom( $image, $params ) {
- # Use a custom convert command
- global $wgCustomConvertCommand;
-
- # Variables: %s %d %w %h
+ protected function transformCustomExecute( $cmd, $params ) {
$src = wfEscapeShellArg( $params['srcPath'] );
$dst = wfEscapeShellArg( $params['dstPath'] );
- $cmd = $wgCustomConvertCommand;
+
$cmd = str_replace( '%s', $src, str_replace( '%d', $dst, $cmd ) ); # Filenames
$cmd = str_replace( '%h', $params['physicalHeight'],
str_replace( '%w', $params['physicalWidth'], $cmd ) ); # Size
@@ -459,8 +463,35 @@
}
return false; # No error
}
+
+ /**
+ * Transform an image using a custom command
+ *
+ * @param $image File File associated with this thumbnail
+ * @param $params array Array with scaler params
+ *
+ * @return MediaTransformError Error object if error occured, false (=no error) otherwise
+ */
+ protected function transformCustom( $image, $params ) {
+ # Use a custom convert command
+ global $wgCustomConvertCommand;
+ return $this->transformCustomExecute($wgCustomConvertCommand, $params);
+ }
/**
+ * Transform an image using an extension-specific custom command
+ *
+ * @param $image File File associated with this thumbnail
+ * @param $params array Array with scaler params
+ *
+ * @return MediaTransformError Error object if error occured, false (=no error) otherwise
+ */
+ protected function transformCustomExt( $image, $params ) {
+ global $wgCustomConvertCommandsByExtension;
+ return $this->transformCustomExecute($wgCustomConvertCommandsByExtension[$params['ext']], $params);
+ }
+
+ /**
* Log an error that occured in an external process
*
* @param $retval int
Index: includes/DefaultSettings.php
===================================================================
--- includes/DefaultSettings.php (revision 95588)
+++ includes/DefaultSettings.php (working copy)
@@ -637,6 +637,20 @@
$wgCustomConvertCommand = false;
/**
+ * Use another resizing converter but only for certain
+ * file extensions. Any extensions not included in this
+ * list will be handled by the generic mechanisms above.
+ * This list overrides all other settings for the
+ * included extensions.
+ *
+ * Example for pngscale:
+ * <code>
+ * $wgCustomConvertCommandsByExtension['png'] = "pngscale %s %d %w %h";
+ * </code>
+ */
+$wgCustomConvertCommandsByExtension = array();
+
+/**
* Some tests and extensions use exiv2 to manipulate the EXIF metadata in some image formats.
*/
$wgExiv2Command = '/usr/bin/exiv2';

File Metadata

Mime Type
text/x-diff
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3396
Default Alt Text
mediawiki_pngscale.patch (4 KB)

Event Timeline