38 private const SRGB_EXIF_COLOR_SPACE =
'sRGB';
39 private const SRGB_ICC_PROFILE_DESCRIPTION =
'sRGB IEC61966-2.1';
42 if ( !parent::normaliseParams( $image,
$params ) ) {
45 if ( isset(
$params[
'quality'] ) && !self::validateQuality(
$params[
'quality'] ) ) {
52 if ( $name ===
'quality' ) {
53 return self::validateQuality( $value );
55 return parent::validateParam( $name, $value );
62 private static function validateQuality( $value ) {
63 return $value ===
'low';
68 $res = parent::makeParamString(
$params );
69 if ( $res && isset(
$params[
'quality'] ) ) {
70 $res =
"q{$params['quality']}-$res";
82 if ( preg_match(
'/q([^-]+)-(.*)$/', $str, $m ) ) {
84 if ( self::validateQuality( $v ) ) {
85 $res = parent::parseParamString( $m[2] );
91 $res = parent::parseParamString( $str );
97 $res = parent::getScriptParams(
$params );
98 if ( isset(
$params[
'quality'] ) ) {
99 $res[
'quality'] =
$params[
'quality'];
107 if ( !is_array( $meta ) ) {
114 'width' => $meta[
'SOF'][
'width'] ?? 0,
115 'height' => $meta[
'SOF'][
'height'] ?? 0,
117 if ( isset( $meta[
'SOF'][
'bits'] ) ) {
118 $info[
'bits'] = $meta[
'SOF'][
'bits'];
121 unset( $meta[
'SOF'] );
122 $info[
'metadata'] = $meta;
125 wfDebug( __METHOD__ .
': ' . $e->getMessage() );
143 $jpegTran = MediaWikiServices::getInstance()->getMainConfig()->get( MainConfigNames::JpegTran );
147 if ( $jpegTran && is_executable( $jpegTran ) ) {
148 $command = Shell::command( $jpegTran,
158 if ( $result->getExitCode() !== 0 ) {
160 $result->getStdout(),
169 return parent::rotate( $file,
$params );
189 $useTinyRGBForJPGThumbnails = MediaWikiServices::getInstance()
190 ->getMainConfig()->get( MainConfigNames::UseTinyRGBForJPGThumbnails );
192 $ret = parent::transformImageMagick( $image,
$params );
198 if ( $useTinyRGBForJPGThumbnails ) {
211 $colorSpaces = [ self::SRGB_EXIF_COLOR_SPACE,
'-' ];
212 $profiles = [ self::SRGB_ICC_PROFILE_DESCRIPTION ];
225 realpath( __DIR__ ) .
'/tinyrgb.icc'
244 array $oldProfileStrings, $profileFilepath
246 $exiftool = MediaWikiServices::getInstance()->getMainConfig()->get( MainConfigNames::Exiftool );
248 if ( !$exiftool || !is_executable( $exiftool ) ) {
252 $result = Shell::command(
255 '-ICC_Profile:ProfileDescription',
264 $data = explode(
"\t", trim( $result->getStdout() ), 3 );
266 if ( $result->getExitCode() !== 0 ) {
272 $colorSpaceRegex =
'/' . preg_quote( $data[0],
'/' ) .
'/i';
273 if ( !preg_grep( $colorSpaceRegex, $colorSpaces ) ) {
278 $profileRegex =
'/' . preg_quote( $data[1],
'/' ) .
'/i';
279 if ( !preg_grep( $profileRegex, $oldProfileStrings ) ) {
284 $command = Shell::command( $exiftool,
285 '-overwrite_original',
286 '-icc_profile<=' . $profileFilepath,
293 if ( $result->getExitCode() !== 0 ) {
295 $result->getStdout(),
wfDebug( $text, $dest='all', array $context=[])
Sends a line to the debug log if enabled or, optionally, to a comment in output.
array $params
The job parameters.
Stuff specific to JPEG and (built-in) TIFF handler.
applyExifRotation( $info, $metadata)
getRotation( $file)
On supporting image formats, try to read out the low-level orientation of the file and return the ang...
const BROKEN_FILE
Error extracting metadata.
static version()
The version of the output format.
makeParamString( $params)
Merge a parameter array into a string appropriate for inclusion in filenames.stringto override to ove...
validateParam( $name, $value)
Validate a thumbnail parameter at parse time.Return true to accept the parameter, and false to reject...
getScriptParams( $params)
swapICCProfile( $filepath, array $colorSpaces, array $oldProfileStrings, $profileFilepath)
Swaps an embedded ICC profile for another, if found.
getSizeAndMetadata( $state, $filename)
Get image size information and metadata array.
supportsBucketing()
Returns whether or not this handler supports the chained generation of thumbnails according to bucket...
parseParamString( $str)
Parse a param string made with makeParamString back into an array.array|false Array of parameters or ...
sanitizeParamsForBucketing( $params)
Returns a normalised params array for which parameters have been cleaned up for bucketing purposes....
normaliseParams( $image, &$params)
transformImageMagick( $image, $params)
Transform an image using ImageMagick.to overrideMediaTransformError|false Error object if error occur...
A class containing constants representing the names of configuration variables.