* @ingroup Media
*/
+use MediaWiki\Shell\Shell;
+
/**
* JPEG specific handler.
* Inherits most stuff from BitmapHandler, just here to do the metadata handler differently.
const SRGB_EXIF_COLOR_SPACE = 'sRGB';
const SRGB_ICC_PROFILE_DESCRIPTION = 'sRGB IEC61966-2.1';
- function normaliseParams( $image, &$params ) {
+ public function normaliseParams( $image, &$params ) {
if ( !parent::normaliseParams( $image, $params ) ) {
return false;
}
return $res;
}
- function getScriptParams( $params ) {
+ protected function getScriptParams( $params ) {
$res = parent::getScriptParams( $params );
if ( isset( $params['quality'] ) ) {
$res['quality'] = $params['quality'];
return $res;
}
- function getMetadata( $image, $filename ) {
+ public function getMetadata( $image, $filename ) {
try {
$meta = BitmapMetadataHandler::Jpeg( $filename );
if ( !is_array( $meta ) ) {
$rotation = ( $params['rotation'] + $this->getRotation( $file ) ) % 360;
if ( $wgJpegTran && is_executable( $wgJpegTran ) ) {
- $cmd = wfEscapeShellArg( $wgJpegTran ) .
- " -rotate " . wfEscapeShellArg( $rotation ) .
- " -outfile " . wfEscapeShellArg( $params['dstPath'] ) .
- " " . wfEscapeShellArg( $params['srcPath'] );
- wfDebug( __METHOD__ . ": running jpgtran: $cmd\n" );
- $retval = 0;
- $err = wfShellExecWithStderr( $cmd, $retval );
- if ( $retval !== 0 ) {
- $this->logErrorForExternalProcess( $retval, $err, $cmd );
-
- return new MediaTransformError( 'thumbnail_error', 0, 0, $err );
+ $command = Shell::command( $wgJpegTran,
+ '-rotate',
+ $rotation,
+ '-outfile',
+ $params['dstPath'],
+ $params['srcPath']
+ );
+ $result = $command
+ ->includeStderr()
+ ->execute();
+ if ( $result->getExitCode() !== 0 ) {
+ $this->logErrorForExternalProcess( $result->getExitCode(),
+ $result->getStdout(),
+ $command
+ );
+
+ return new MediaTransformError( 'thumbnail_error', 0, 0, $result->getStdout() );
}
return false;
* @return bool
*/
public function swapICCProfile( $filepath, array $colorSpaces,
- array $oldProfileStrings, $profileFilepath
+ array $oldProfileStrings, $profileFilepath
) {
global $wgExiftool;
return false;
}
- $cmd = wfEscapeShellArg( $wgExiftool,
+ $result = Shell::command(
+ $wgExiftool,
'-EXIF:ColorSpace',
'-ICC_Profile:ProfileDescription',
'-S',
'-T',
$filepath
- );
-
- $output = wfShellExecWithStderr( $cmd, $retval );
+ )
+ ->includeStderr()
+ ->execute();
// Explode EXIF data into an array with [0 => Color Space, 1 => Device Model Desc]
- $data = explode( "\t", trim( $output ) );
+ $data = explode( "\t", trim( $result->getStdout() ) );
- if ( $retval !== 0 ) {
+ if ( $result->getExitCode() !== 0 ) {
return false;
}
// Make a regex out of the source data to match it to an array of color
// spaces in a case-insensitive way
- $colorSpaceRegex = '/'.preg_quote( $data[0], '/' ).'/i';
+ $colorSpaceRegex = '/' . preg_quote( $data[0], '/' ) . '/i';
if ( empty( preg_grep( $colorSpaceRegex, $colorSpaces ) ) ) {
// We can't establish that this file matches the color space, don't process it
return false;
}
- $profileRegex = '/'.preg_quote( $data[1], '/' ).'/i';
+ $profileRegex = '/' . preg_quote( $data[1], '/' ) . '/i';
if ( empty( preg_grep( $profileRegex, $oldProfileStrings ) ) ) {
// We can't establish that this file has the expected ICC profile, don't process it
return false;
}
- $cmd = wfEscapeShellArg( $wgExiftool,
+ $command = Shell::command( $wgExiftool,
'-overwrite_original',
'-icc_profile<=' . $profileFilepath,
$filepath
);
-
- $output = wfShellExecWithStderr( $cmd, $retval );
-
- if ( $retval !== 0 ) {
- $this->logErrorForExternalProcess( $retval, $output, $cmd );
+ $result = $command
+ ->includeStderr()
+ ->execute();
+
+ if ( $result->getExitCode() !== 0 ) {
+ $this->logErrorForExternalProcess( $result->getExitCode(),
+ $result->getStdout(),
+ $command
+ );
return false;
}