Movatterモバイル変換


[0]ホーム

URL:


MediaWiki master
SvgHandler.php
Go to the documentation of this file.
1<?php
24useMediaWiki\Context\IContextSource;
25useMediaWiki\FileRepo\File\File;
26useMediaWiki\Language\LanguageCode;
27useMediaWiki\MainConfigNames;
28useMediaWiki\MediaWikiServices;
29useMediaWiki\Shell\Shell;
30use Wikimedia\AtEase\AtEase;
31use Wikimedia\ScopedCallback;
32
38classSvgHandlerextendsImageHandler {
39publicconstSVG_METADATA_VERSION = 2;
40
41privateconst SVG_DEFAULT_RENDER_LANG ='en';
42
47privatestatic $metaConversion = [
48'originalwidth' =>'ImageWidth',
49'originalheight' =>'ImageLength',
50'description' =>'ImageDescription',
51'title' =>'ObjectName',
52 ];
53
54publicfunctionisEnabled() {
55 $config = MediaWikiServices::getInstance()->getMainConfig();
56 $svgConverters = $config->get( MainConfigNames::SVGConverters );
57 $svgConverter = $config->get( MainConfigNames::SVGConverter );
58if ( $config->get( MainConfigNames::SVGNativeRendering ) ===true ) {
59returntrue;
60 }
61if ( !isset( $svgConverters[$svgConverter] ) ) {
62wfDebug("\$wgSVGConverter is invalid, disabling SVG rendering." );
63
64returnfalse;
65 }
66
67returntrue;
68 }
69
74publicfunctionallowRenderingByUserAgent( $file ) {
75 $svgNativeRendering = MediaWikiServices::getInstance()
76 ->getMainConfig()->get( MainConfigNames::SVGNativeRendering );
77if ( $svgNativeRendering ===true ) {
78// Don't do any transform for any SVG.
79returntrue;
80 }
81if ( $svgNativeRendering !=='partial' ) {
82// SVG images are always rasterized to PNG
83returnfalse;
84 }
85 $maxSVGFilesize = MediaWikiServices::getInstance()
86 ->getMainConfig()->get( MainConfigNames::SVGNativeRenderingSizeLimit );
87// Browsers don't really support SVG translations, so always render them to PNG
88// Files bigger than the limit are also rendered as PNG, as big files might be a tax on the user agent
89return count( $this->getAvailableLanguages( $file ) ) <= 1
90 && $file->getSize() <= $maxSVGFilesize;
91 }
92
93publicfunctionmustRender( $file ) {
94return !$this->allowRenderingByUserAgent( $file );
95 }
96
97publicfunctionisVectorized( $file ) {
98returntrue;
99 }
100
105publicfunctionisAnimatedImage( $file ) {
106 # @todo Detect animated SVGs
107 $metadata = $this->validateMetadata( $file->getMetadataArray() );
108if ( isset( $metadata['animated'] ) ) {
109return $metadata['animated'];
110 }
111
112returnfalse;
113 }
114
127publicfunctiongetAvailableLanguages(File $file ) {
128 $langList = [];
129 $metadata = $this->validateMetadata( $file->getMetadataArray() );
130if ( isset( $metadata['translations'] ) ) {
131foreach ( $metadata['translations'] as $lang => $langType ) {
132if ( $langType === SVGReader::LANG_FULL_MATCH ) {
133 $langList[] = strtolower( $lang );
134 }
135 }
136 }
137return array_unique( $langList );
138 }
139
155publicfunctiongetMatchedLanguage( $userPreferredLanguage, array $svgLanguages ) {
156// Explicitly requested undetermined language (text without svg systemLanguage attribute)
157if ( $userPreferredLanguage ==='und' ) {
158return'und';
159 }
160foreach ( $svgLanguages as $svgLang ) {
161if ( strcasecmp( $svgLang, $userPreferredLanguage ) === 0 ) {
162return $svgLang;
163 }
164 $trimmedSvgLang = $svgLang;
165while ( strpos( $trimmedSvgLang,'-' ) !==false ) {
166 $trimmedSvgLang = substr( $trimmedSvgLang, 0, strrpos( $trimmedSvgLang,'-' ) );
167if ( strcasecmp( $trimmedSvgLang, $userPreferredLanguage ) === 0 ) {
168return $svgLang;
169 }
170 }
171 }
172returnnull;
173 }
174
182protectedfunctiongetLanguageFromParams( array $params ) {
183return $params['lang'] ?? $params['targetlang'] ?? self::SVG_DEFAULT_RENDER_LANG;
184 }
185
192publicfunctiongetDefaultRenderLanguage(File $file ) {
193return self::SVG_DEFAULT_RENDER_LANG;
194 }
195
201publicfunctioncanAnimateThumbnail( $file ) {
202return $this->allowRenderingByUserAgent( $file );
203 }
204
210publicfunctionnormaliseParams( $image, &$params ) {
211if ( parent::normaliseParams( $image, $params ) ) {
212 $params = $this->normaliseParamsInternal( $image, $params );
213returntrue;
214 }
215
216returnfalse;
217 }
218
228protectedfunctionnormaliseParamsInternal( $image, $params ) {
229 $svgMaxSize = MediaWikiServices::getInstance()->getMainConfig()->get( MainConfigNames::SVGMaxSize );
230
231 # Don't make an image bigger than wgMaxSVGSize on the smaller side
232if ( $params['physicalWidth'] <= $params['physicalHeight'] ) {
233if ( $params['physicalWidth'] > $svgMaxSize ) {
234 $srcWidth = $image->getWidth( $params['page'] );
235 $srcHeight = $image->getHeight( $params['page'] );
236 $params['physicalWidth'] = $svgMaxSize;
237 $params['physicalHeight'] = File::scaleHeight( $srcWidth, $srcHeight, $svgMaxSize );
238 }
239 } elseif ( $params['physicalHeight'] > $svgMaxSize ) {
240 $srcWidth = $image->getWidth( $params['page'] );
241 $srcHeight = $image->getHeight( $params['page'] );
242 $params['physicalWidth'] = File::scaleHeight( $srcHeight, $srcWidth, $svgMaxSize );
243 $params['physicalHeight'] = $svgMaxSize;
244 }
245// To prevent the proliferation of thumbnails in languages not present in SVGs, unless
246// explicitly forced by user.
247if ( isset( $params['targetlang'] ) && !$image->getMatchedLanguage( $params['targetlang'] ) ) {
248 unset( $params['targetlang'] );
249 }
250
251return $params;
252 }
253
262publicfunctiondoTransform( $image, $dstPath, $dstUrl, $params, $flags = 0 ) {
263if ( !$this->normaliseParams( $image, $params ) ) {
264returnnewTransformParameterError( $params );
265 }
266 $clientWidth = $params['width'];
267 $clientHeight = $params['height'];
268 $physicalWidth = $params['physicalWidth'];
269 $physicalHeight = $params['physicalHeight'];
270 $lang = $this->getLanguageFromParams( $params );
271
272if ( $this->allowRenderingByUserAgent( $image ) ) {
273// No transformation required for native rendering
274returnnewThumbnailImage( $image, $image->getURL(),false, $params );
275 }
276
277if ( $flags & self::TRANSFORM_LATER ) {
278returnnewThumbnailImage( $image, $dstUrl, $dstPath, $params );
279 }
280
281 $metadata = $this->validateMetadata( $image->getMetadataArray() );
282if ( isset( $metadata['error'] ) ) {
283 $err =wfMessage('svg-long-error', $metadata['error']['message'] );
284
285returnnewMediaTransformError('thumbnail_error', $clientWidth, $clientHeight, $err );
286 }
287
288if ( !wfMkdirParents( dirname( $dstPath ),null, __METHOD__ ) ) {
289returnnewMediaTransformError('thumbnail_error', $clientWidth, $clientHeight,
290wfMessage('thumbnail_dest_directory' ) );
291 }
292
293 $srcPath = $image->getLocalRefPath();
294if ( $srcPath ===false ) {// Failed to get local copy
295wfDebugLog('thumbnail',
296 sprintf('Thumbnail failed on %s: could not get local copy of "%s"',
297wfHostname(), $image->getName() ) );
298
299returnnewMediaTransformError('thumbnail_error',
300 $params['width'], $params['height'],
301wfMessage('filemissing' )
302 );
303 }
304
305// Make a temp dir with a symlink to the local copy in it.
306// This plays well with rsvg-convert policy for external entities.
307// https://git.gnome.org/browse/librsvg/commit/?id=f01aded72c38f0e18bc7ff67dee800e380251c8e
308 $tmpDir =wfTempDir() .'/svg_' .wfRandomString( 24 );
309 $lnPath ="$tmpDir/" . basename( $srcPath );
310 $ok = mkdir( $tmpDir, 0771 );
311if ( !$ok ) {
312wfDebugLog('thumbnail',
313 sprintf('Thumbnail failed on %s: could not create temporary directory %s',
314wfHostname(), $tmpDir ) );
315returnnewMediaTransformError('thumbnail_error',
316 $params['width'], $params['height'],
317wfMessage('thumbnail-temp-create' )->text()
318 );
319 }
320// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
321 $ok = @symlink( $srcPath, $lnPath );
323 $cleaner =new ScopedCallback(staticfunction () use ( $tmpDir, $lnPath ) {
324 AtEase::suppressWarnings();
325 unlink( $lnPath );
326 rmdir( $tmpDir );
327 AtEase::restoreWarnings();
328 } );
329if ( !$ok ) {
330// Fallback because symlink often fails on Windows
331 $ok = copy( $srcPath, $lnPath );
332 }
333if ( !$ok ) {
334wfDebugLog('thumbnail',
335 sprintf('Thumbnail failed on %s: could not link %s to %s',
336wfHostname(), $lnPath, $srcPath ) );
337returnnewMediaTransformError('thumbnail_error',
338 $params['width'], $params['height'],
339wfMessage('thumbnail-temp-create' )
340 );
341 }
342
343 $status = $this->rasterize( $lnPath, $dstPath, $physicalWidth, $physicalHeight, $lang );
344if ( $status ===true ) {
345returnnewThumbnailImage( $image, $dstUrl, $dstPath, $params );
346 }
347
348return $status;// MediaTransformError
349 }
350
361publicfunctionrasterize( $srcPath, $dstPath, $width, $height, $lang =false ) {
362 $mainConfig = MediaWikiServices::getInstance()->getMainConfig();
363 $svgConverters = $mainConfig->get( MainConfigNames::SVGConverters );
364 $svgConverter = $mainConfig->get( MainConfigNames::SVGConverter );
365 $svgConverterPath = $mainConfig->get( MainConfigNames::SVGConverterPath );
366 $err =false;
367 $retval ='';
368if ( isset( $svgConverters[$svgConverter] ) ) {
369if ( is_array( $svgConverters[$svgConverter] ) ) {
370// This is a PHP callable
371 $func = $svgConverters[$svgConverter][0];
372if ( !is_callable( $func ) ) {
373thrownew UnexpectedValueException("$func is not callable" );
374 }
375 $err = $func( $srcPath,
376 $dstPath,
377 $width,
378 $height,
379 $lang,
380 ...array_slice( $svgConverters[$svgConverter], 1 )
381 );
382 $retval = (bool)$err;
383 }else {
384// External command
385 $cmd = strtr( $svgConverters[$svgConverter], [
386'$path/' => $svgConverterPath ? Shell::escape("$svgConverterPath/" ) :'',
387'$width' => (int)$width,
388'$height' => (int)$height,
389'$input' => Shell::escape( $srcPath ),
390'$output' => Shell::escape( $dstPath ),
391 ] );
392
393 $env = [];
394if ( $lang !==false ) {
395 $env['LANG'] = $lang;
396 }
397
398wfDebug( __METHOD__ .": $cmd" );
399 $err =wfShellExecWithStderr( $cmd, $retval, $env );
400 }
401 }
402 $removed = $this->removeBadFile( $dstPath, $retval );
403if ( $retval != 0 || $removed ) {
404// @phan-suppress-next-next-line PhanPossiblyUndeclaredVariable cmd is set when used
405// @phan-suppress-next-line PhanTypeMismatchArgumentNullable cmd is set when used
406 $this->logErrorForExternalProcess( $retval, $err, $cmd );
407returnnewMediaTransformError('thumbnail_error', $width, $height, $err );
408 }
409
410returntrue;
411 }
412
420publicstaticfunctionrasterizeImagickExt( $srcPath, $dstPath, $width, $height ) {
421 $im =new Imagick( $srcPath );
422 $im->setBackgroundColor('transparent' );
423 $im->readImage( $srcPath );
424 $im->setImageFormat('png' );
425 $im->setImageDepth( 8 );
426
427if ( !$im->thumbnailImage( (int)$width, (int)$height,/* fit */false ) ) {
428return'Could not resize image';
429 }
430if ( !$im->writeImage( $dstPath ) ) {
431return"Could not write to $dstPath";
432 }
433 }
434
435publicfunctiongetThumbType( $ext, $mime, $params =null ) {
436return ['png','image/png' ];
437 }
438
448publicfunctiongetLongDesc( $file ) {
449 $metadata = $this->validateMetadata( $file->getMetadataArray() );
450if ( isset( $metadata['error'] ) ) {
451returnwfMessage('svg-long-error', $metadata['error']['message'] )->escaped();
452 }
453
454if ( $this->isAnimatedImage( $file ) ) {
455 $msg =wfMessage('svg-long-desc-animated' );
456 }else {
457 $msg =wfMessage('svg-long-desc' );
458 }
459
460return $msg
461 ->numParams( $file->getWidth(), $file->getHeight() )
462 ->sizeParams( $file->getSize() )
463 ->parse();
464 }
465
471publicfunctiongetSizeAndMetadata( $state, $filename ) {
472 $metadata = ['version' => self::SVG_METADATA_VERSION ];
473
474try {
475 $svgReader =newSVGReader( $filename );
476 $metadata += $svgReader->getMetadata();
477 }catch (InvalidSVGException $e ) {
478// File not found, broken, etc.
479 $metadata['error'] = [
480'message' => $e->getMessage(),
481'code' => $e->getCode()
482 ];
483wfDebug( __METHOD__ .': ' . $e->getMessage() );
484 }
485
486return [
487'width' => $metadata['width'] ?? 0,
488'height' => $metadata['height'] ?? 0,
489'metadata' => $metadata
490 ];
491 }
492
493protectedfunctionvalidateMetadata( $unser ) {
494if ( isset( $unser['version'] ) && $unser['version'] === self::SVG_METADATA_VERSION ) {
495return $unser;
496 }
497
498returnnull;
499 }
500
501publicfunctiongetMetadataType( $image ) {
502return'parsed-svg';
503 }
504
505publicfunctionisFileMetadataValid( $image ) {
506 $meta = $this->validateMetadata( $image->getMetadataArray() );
507if ( !$meta ) {
508return self::METADATA_BAD;
509 }
510if ( !isset( $meta['originalWidth'] ) ) {
511// Old but compatible
512return self::METADATA_COMPATIBLE;
513 }
514
515return self::METADATA_GOOD;
516 }
517
518protectedfunctionvisibleMetadataFields() {
519return ['objectname','imagedescription' ];
520 }
521
527publicfunctionformatMetadata( $file, $context =false ) {
528 $result = [
529'visible' => [],
530'collapsed' => []
531 ];
532 $metadata = $this->validateMetadata( $file->getMetadataArray() );
533if ( !$metadata || isset( $metadata['error'] ) ) {
534returnfalse;
535 }
536
537/* @todo Add a formatter
538 $format = new FormatSVG( $metadata );
539 $formatted = $format->getFormattedData();
540 */
541
542// Sort fields into visible and collapsed
543 $visibleFields = $this->visibleMetadataFields();
544
545 $showMeta =false;
546foreach ( $metadata as $name => $value ) {
547 $tag = strtolower( $name );
548if ( isset( self::$metaConversion[$tag] ) ) {
549 $tag = strtolower( self::$metaConversion[$tag] );
550 }else {
551// Do not output other metadata not in list
552continue;
553 }
554 $showMeta =true;
555 self::addMeta( $result,
556 in_array( $tag, $visibleFields ) ?'visible' :'collapsed',
557'exif',
558 $tag,
559 $value
560 );
561 }
562
563return $showMeta ? $result :false;
564 }
565
571publicfunctionvalidateParam( $name, $value ) {
572if ( in_array( $name, ['width','height' ] ) ) {
573// Reject negative heights, widths
574return ( $value > 0 );
575 }
576if ( $name ==='lang' ) {
577// Validate $code
578if ( $value ===''
579 || !LanguageCode::isWellFormedLanguageTag( $value )
580 ) {
581returnfalse;
582 }
583
584returntrue;
585 }
586
587// Only lang, width and height are acceptable keys
588returnfalse;
589 }
590
595publicfunctionmakeParamString( $params ) {
596 $lang ='';
597 $code = $this->getLanguageFromParams( $params );
598if ( $code !== self::SVG_DEFAULT_RENDER_LANG ) {
599 $lang ='lang' . strtolower( $code ) .'-';
600 }
601
602if ( isset( $params['physicalWidth'] ) && $params['physicalWidth'] ) {
603return"$lang{$params['physicalWidth']}px";
604 }
605
606if ( !isset( $params['width'] ) ) {
607returnfalse;
608 }
609
610return"$lang{$params['width']}px";
611 }
612
613publicfunctionparseParamString( $str ) {
614 $m =false;
615// Language codes are supposed to be lowercase
616if ( preg_match('/^lang([a-z]+(?:-[a-z]+)*)-(\d+)px$/', $str, $m ) ) {
617if ( LanguageCode::isWellFormedLanguageTag( $m[1] ) ) {
618return ['width' => array_pop( $m ),'lang' => $m[1] ];
619 }
620return ['width' => array_pop( $m ),'lang' => self::SVG_DEFAULT_RENDER_LANG ];
621 }
622if ( preg_match('/^(\d+)px$/', $str, $m ) ) {
623return ['width' => $m[1],'lang' => self::SVG_DEFAULT_RENDER_LANG ];
624 }
625returnfalse;
626 }
627
628publicfunctiongetParamMap() {
629return ['img_lang' =>'lang','img_width' =>'width' ];
630 }
631
636protectedfunctiongetScriptParams( $params ) {
637 $scriptParams = ['width' => $params['width'] ];
638if ( isset( $params['lang'] ) ) {
639 $scriptParams['lang'] = $params['lang'];
640 }
641
642return $scriptParams;
643 }
644
645publicfunctiongetCommonMetaArray(File $file ) {
646 $metadata = $this->validateMetadata( $file->getMetadataArray() );
647if ( !$metadata || isset( $metadata['error'] ) ) {
648return [];
649 }
650 $stdMetadata = [];
651foreach ( $metadata as $name => $value ) {
652 $tag = strtolower( $name );
653if ( $tag ==='originalwidth' || $tag ==='originalheight' ) {
654// Skip these. In the exif metadata stuff, it is assumed these
655// are measured in px, which is not the case here.
656continue;
657 }
658if ( isset( self::$metaConversion[$tag] ) ) {
659 $tag = self::$metaConversion[$tag];
660 $stdMetadata[$tag] = $value;
661 }
662 }
663
664return $stdMetadata;
665 }
666}
wfDebug
wfDebug( $text, $dest='all', array $context=[])
Sends a line to the debug log if enabled or, optionally, to a comment in output.
DefinitionGlobalFunctions.php:671
wfTempDir
wfTempDir()
Tries to get the system directory for temporary files.
DefinitionGlobalFunctions.php:1375
wfRandomString
wfRandomString( $length=32)
Get a random string containing a number of pseudo-random hex characters.
DefinitionGlobalFunctions.php:276
wfHostname
wfHostname()
Get host name of the current machine, for use in error reporting.
DefinitionGlobalFunctions.php:927
wfShellExecWithStderr
wfShellExecWithStderr( $cmd, &$retval=null, $environ=[], $limits=[])
Execute a shell command, returning both stdout and stderr.
DefinitionGlobalFunctions.php:1600
wfDebugLog
wfDebugLog( $logGroup, $text, $dest='all', array $context=[])
Send a line to a supplementary debug log file, if configured, or main debug log if not.
DefinitionGlobalFunctions.php:735
wfMkdirParents
wfMkdirParents( $dir, $mode=null, $caller=null)
Make directory, and make all parent directories if they don't exist.
DefinitionGlobalFunctions.php:1393
wfMessage
wfMessage( $key,... $params)
This is the function for getting translated interface messages.
DefinitionGlobalFunctions.php:859
ImageHandler
Media handler abstract base class for images.
DefinitionImageHandler.php:34
InvalidSVGException
DefinitionInvalidSVGException.php:3
MediaHandler\logErrorForExternalProcess
logErrorForExternalProcess( $retval, $err, $cmd)
Log an error that occurred in an external process.
DefinitionMediaHandler.php:1029
MediaHandler\removeBadFile
removeBadFile( $dstPath, $retval=0)
Check for zero-sized thumbnails.
DefinitionMediaHandler.php:946
MediaTransformError
Basic media transform error class.
DefinitionMediaTransformError.php:35
MediaWiki\FileRepo\File\File
Implements some public methods and some protected utility functions which are required by multiple ch...
DefinitionFile.php:93
MediaWiki\FileRepo\File\File\getMetadataArray
getMetadataArray()
Get the unserialized handler-specific metadata STUB.
DefinitionFile.php:791
MediaWiki\Language\LanguageCode
Methods for dealing with language codes.
DefinitionLanguageCode.php:32
MediaWiki\MainConfigNames
A class containing constants representing the names of configuration variables.
DefinitionMainConfigNames.php:22
MediaWiki\MediaWikiServices
Service locator for MediaWiki core services.
DefinitionMediaWikiServices.php:250
MediaWiki\Shell\Shell
Executes shell commands.
DefinitionShell.php:46
SVGReader
DefinitionSVGReader.php:37
SvgHandler
Handler for SVG images.
DefinitionSvgHandler.php:38
SvgHandler\validateParam
validateParam( $name, $value)
DefinitionSvgHandler.php:571
SvgHandler\isVectorized
isVectorized( $file)
The material is vectorized and thus scaling is lossless.
DefinitionSvgHandler.php:97
SvgHandler\normaliseParams
normaliseParams( $image, &$params)
DefinitionSvgHandler.php:210
SvgHandler\formatMetadata
formatMetadata( $file, $context=false)
DefinitionSvgHandler.php:527
SvgHandler\parseParamString
parseParamString( $str)
Parse a param string made with makeParamString back into an array.array|false Array of parameters or ...
DefinitionSvgHandler.php:613
SvgHandler\mustRender
mustRender( $file)
True if handled types cannot be displayed directly in a browser but can be rendered.
DefinitionSvgHandler.php:93
SvgHandler\getScriptParams
getScriptParams( $params)
DefinitionSvgHandler.php:636
SvgHandler\makeParamString
makeParamString( $params)
DefinitionSvgHandler.php:595
SvgHandler\getCommonMetaArray
getCommonMetaArray(File $file)
Get an array of standard (FormatMetadata type) metadata values.
DefinitionSvgHandler.php:645
SvgHandler\doTransform
doTransform( $image, $dstPath, $dstUrl, $params, $flags=0)
DefinitionSvgHandler.php:262
SvgHandler\validateMetadata
validateMetadata( $unser)
DefinitionSvgHandler.php:493
SvgHandler\getLanguageFromParams
getLanguageFromParams(array $params)
Determines render language from image parameters This is a lowercase IETF language.
DefinitionSvgHandler.php:182
SvgHandler\getAvailableLanguages
getAvailableLanguages(File $file)
Which languages (systemLanguage attribute) is supported.
DefinitionSvgHandler.php:127
SvgHandler\getLongDesc
getLongDesc( $file)
Subtitle for the image.
DefinitionSvgHandler.php:448
SvgHandler\normaliseParamsInternal
normaliseParamsInternal( $image, $params)
Code taken out of normaliseParams() for testability.
DefinitionSvgHandler.php:228
SvgHandler\getMetadataType
getMetadataType( $image)
Get a string describing the type of metadata, for display purposes.
DefinitionSvgHandler.php:501
SvgHandler\getThumbType
getThumbType( $ext, $mime, $params=null)
Get the thumbnail extension and MIME type for a given source MIME type.
DefinitionSvgHandler.php:435
SvgHandler\getDefaultRenderLanguage
getDefaultRenderLanguage(File $file)
What language to render file in if none selected.
DefinitionSvgHandler.php:192
SvgHandler\rasterize
rasterize( $srcPath, $dstPath, $width, $height, $lang=false)
Transform an SVG file to PNG This function can be called outside of thumbnail contexts.
DefinitionSvgHandler.php:361
SvgHandler\getSizeAndMetadata
getSizeAndMetadata( $state, $filename)
DefinitionSvgHandler.php:471
SvgHandler\isEnabled
isEnabled()
False if the handler is disabled for all files.
DefinitionSvgHandler.php:54
SvgHandler\canAnimateThumbnail
canAnimateThumbnail( $file)
We do not support making animated svg thumbnails.
DefinitionSvgHandler.php:201
SvgHandler\visibleMetadataFields
visibleMetadataFields()
Get a list of metadata items which should be displayed when the metadata table is collapsed.
DefinitionSvgHandler.php:518
SvgHandler\rasterizeImagickExt
static rasterizeImagickExt( $srcPath, $dstPath, $width, $height)
DefinitionSvgHandler.php:420
SvgHandler\isFileMetadataValid
isFileMetadataValid( $image)
Check if the metadata is valid for this handler.
DefinitionSvgHandler.php:505
SvgHandler\isAnimatedImage
isAnimatedImage( $file)
DefinitionSvgHandler.php:105
SvgHandler\getMatchedLanguage
getMatchedLanguage( $userPreferredLanguage, array $svgLanguages)
SVG's systemLanguage matching rules state: 'The systemLanguage attribute ... [e]valuates to "true" if...
DefinitionSvgHandler.php:155
SvgHandler\SVG_METADATA_VERSION
const SVG_METADATA_VERSION
DefinitionSvgHandler.php:39
SvgHandler\allowRenderingByUserAgent
allowRenderingByUserAgent( $file)
DefinitionSvgHandler.php:74
SvgHandler\getParamMap
getParamMap()
Get an associative array mapping magic word IDs to parameter names.Will be used by the parser to iden...
DefinitionSvgHandler.php:628
ThumbnailImage
Media transform output for images.
DefinitionThumbnailImage.php:37
TransformParameterError
Shortcut class for parameter validation errors.
DefinitionTransformParameterError.php:30
MediaWiki\Context\IContextSource
Interface for objects which can provide a MediaWiki context on request.
DefinitionIContextSource.php:71

[8]ページ先頭

©2009-2025 Movatter.jp