-= Team Anon Force =-
Uname:
Perm: -rw-r--r--
/
home
/
ogbpffv
/
www
/
atpr
/
wp-includes
/
Nama File / Folder
Size
Action
ID3
--
NONE
IXR
--
NONE
PHPMailer
--
NONE
Requests
--
NONE
SimplePie
--
NONE
Text
--
NONE
abilities-api
--
NONE
ai-client
--
NONE
assets
--
NONE
block-bindings
--
NONE
block-patterns
--
NONE
block-supports
--
NONE
blocks
--
NONE
build
--
NONE
certificates
--
NONE
collaboration
--
NONE
css
--
NONE
customize
--
NONE
fonts
--
NONE
html-api
--
NONE
images
--
NONE
interactivity-api
--
NONE
js
--
NONE
l10n
--
NONE
php-ai-client
--
NONE
php-compat
--
NONE
pomo
--
NONE
rest-api
--
NONE
sitemaps
--
NONE
sodium_compat
--
NONE
style-engine
--
NONE
theme-compat
--
NONE
widgets
--
NONE
abilities-api.php
23.798KB
Delete
Edit
abilities.php
7.821KB
Delete
Edit
admin-bar.php
38.394KB
Delete
Edit
ai-client.php
2.489KB
Delete
Edit
atomlib.php
11.896KB
Delete
Edit
author-template.php
19.379KB
Delete
Edit
block-bindings.php
7.35KB
Delete
Edit
block-editor.php
28.051KB
Delete
Edit
block-i18n.json
0.309KB
Delete
Edit
block-template-utils.php
61.332KB
Delete
Edit
block-template.php
17.833KB
Delete
Edit
blocks.php
116.643KB
Delete
Edit
bookmark-template.php
12.469KB
Delete
Edit
bookmark.php
15.065KB
Delete
Edit
cache-compat.php
10.763KB
Delete
Edit
cache.php
13.17KB
Delete
Edit
canonical.php
33.833KB
Delete
Edit
capabilities.php
42.61KB
Delete
Edit
category-template.php
55.649KB
Delete
Edit
category.php
12.533KB
Delete
Edit
class-IXR.php
2.555KB
Delete
Edit
class-avif-info.php
29.305KB
Delete
Edit
class-feed.php
0.526KB
Delete
Edit
class-http.php
0.358KB
Delete
Edit
class-oembed.php
0.392KB
Delete
Edit
class-phpass.php
6.612KB
Delete
Edit
class-phpmailer.php
0.648KB
Delete
Edit
class-pop3.php
20.626KB
Delete
Edit
class-requests.php
2.185KB
Delete
Edit
class-simplepie.php
0.442KB
Delete
Edit
class-smtp.php
0.446KB
Delete
Edit
class-snoopy.php
36.831KB
Delete
Edit
class-walker-category-dropdown.php
2.411KB
Delete
Edit
class-walker-category.php
8.278KB
Delete
Edit
class-walker-nav-menu.php
11.762KB
Delete
Edit
class-walker-page-dropdown.php
2.646KB
Delete
Edit
class-walker-page.php
7.434KB
Delete
Edit
class-wp-admin-bar.php
17.582KB
Delete
Edit
class-wp-ajax-response.php
5.143KB
Delete
Edit
class-wp-application-passwords.php
16.698KB
Delete
Edit
class-wp-block-bindings-registry.php
8.069KB
Delete
Edit
class-wp-block-bindings-source.php
2.922KB
Delete
Edit
class-wp-block-editor-context.php
1.318KB
Delete
Edit
class-wp-block-list.php
4.603KB
Delete
Edit
class-wp-block-metadata-registry.php
11.568KB
Delete
Edit
class-wp-block-parser-block.php
2.495KB
Delete
Edit
class-wp-block-parser-frame.php
1.947KB
Delete
Edit
class-wp-block-parser.php
11.25KB
Delete
Edit
class-wp-block-pattern-categories-registry.php
4.28KB
Delete
Edit
class-wp-block-patterns-registry.php
10.07KB
Delete
Edit
class-wp-block-processor.php
68.319KB
Delete
Edit
class-wp-block-styles-registry.php
6.269KB
Delete
Edit
class-wp-block-supports.php
6.397KB
Delete
Edit
class-wp-block-template.php
1.985KB
Delete
Edit
class-wp-block-templates-registry.php
6.914KB
Delete
Edit
class-wp-block-type-registry.php
4.912KB
Delete
Edit
class-wp-block-type.php
16.829KB
Delete
Edit
class-wp-block.php
24.141KB
Delete
Edit
class-wp-classic-to-block-menu-converter.php
3.932KB
Delete
Edit
class-wp-comment-query.php
47.491KB
Delete
Edit
class-wp-connector-registry.php
14.071KB
Delete
Edit
class-wp-customize-control.php
25.507KB
Delete
Edit
class-wp-customize-manager.php
198.126KB
Delete
Edit
class-wp-customize-nav-menus.php
56.609KB
Delete
Edit
class-wp-customize-panel.php
10.459KB
Delete
Edit
class-wp-customize-section.php
10.946KB
Delete
Edit
class-wp-customize-setting.php
29.261KB
Delete
Edit
class-wp-date-query.php
35.127KB
Delete
Edit
class-wp-dependencies.php
16.688KB
Delete
Edit
class-wp-dependency.php
2.591KB
Delete
Edit
class-wp-duotone.php
39.951KB
Delete
Edit
class-wp-editor.php
70.535KB
Delete
Edit
class-wp-embed.php
15.535KB
Delete
Edit
class-wp-error.php
7.326KB
Delete
Edit
class-wp-fatal-error-handler.php
7.959KB
Delete
Edit
class-wp-feed-cache-transient.php
3.227KB
Delete
Edit
class-wp-feed-cache.php
0.946KB
Delete
Edit
class-wp-hook.php
16.246KB
Delete
Edit
class-wp-http-cookie.php
7.099KB
Delete
Edit
class-wp-http-curl.php
12.95KB
Delete
Edit
class-wp-http-encoding.php
6.532KB
Delete
Edit
class-wp-http-ixr-client.php
3.434KB
Delete
Edit
class-wp-http-proxy.php
5.84KB
Delete
Edit
class-wp-http-requests-hooks.php
1.975KB
Delete
Edit
class-wp-http-requests-response.php
4.144KB
Delete
Edit
class-wp-http-response.php
2.907KB
Delete
Edit
class-wp-http-streams.php
16.371KB
Delete
Edit
class-wp-http.php
40.672KB
Delete
Edit
class-wp-icons-registry.php
7.673KB
Delete
Edit
class-wp-image-editor-gd.php
20.22KB
Delete
Edit
class-wp-image-editor-imagick.php
36.11KB
Delete
Edit
class-wp-image-editor.php
17.01KB
Delete
Edit
class-wp-list-util.php
7.269KB
Delete
Edit
class-wp-locale-switcher.php
6.617KB
Delete
Edit
class-wp-locale.php
16.453KB
Delete
Edit
class-wp-matchesmapregex.php
1.785KB
Delete
Edit
class-wp-meta-query.php
29.792KB
Delete
Edit
class-wp-metadata-lazyloader.php
6.673KB
Delete
Edit
class-wp-navigation-fallback.php
8.978KB
Delete
Edit
class-wp-network-query.php
19.252KB
Delete
Edit
class-wp-network.php
12.008KB
Delete
Edit
class-wp-object-cache.php
17.113KB
Delete
Edit
class-wp-oembed-controller.php
6.743KB
Delete
Edit
class-wp-oembed.php
30.862KB
Delete
Edit
class-wp-paused-extensions-storage.php
4.948KB
Delete
Edit
class-wp-plugin-dependencies.php
24.592KB
Delete
Edit
class-wp-post.php
6.331KB
Delete
Edit
class-wp-query.php
159.503KB
Delete
Edit
class-wp-recovery-mode-cookie-service.php
6.716KB
Delete
Edit
class-wp-recovery-mode-email-service.php
10.904KB
Delete
Edit
class-wp-recovery-mode-key-service.php
4.799KB
Delete
Edit
class-wp-recovery-mode-link-service.php
3.44KB
Delete
Edit
class-wp-recovery-mode.php
11.185KB
Delete
Edit
class-wp-rewrite.php
62.2KB
Delete
Edit
class-wp-role.php
2.464KB
Delete
Edit
class-wp-roles.php
9.103KB
Delete
Edit
class-wp-script-modules.php
39.647KB
Delete
Edit
class-wp-scripts.php
35.927KB
Delete
Edit
class-wp-session-tokens.php
7.147KB
Delete
Edit
class-wp-simplepie-file.php
3.469KB
Delete
Edit
class-wp-simplepie-sanitize-kses.php
1.865KB
Delete
Edit
class-wp-site-query.php
30.744KB
Delete
Edit
class-wp-site.php
7.284KB
Delete
Edit
class-wp-speculation-rules.php
7.377KB
Delete
Edit
class-wp-styles.php
13.043KB
Delete
Edit
class-wp-tax-query.php
19.118KB
Delete
Edit
class-wp-taxonomy.php
18.124KB
Delete
Edit
class-wp-term-query.php
39.796KB
Delete
Edit
class-wp-term.php
5.14KB
Delete
Edit
class-wp-text-diff-renderer-inline.php
0.956KB
Delete
Edit
class-wp-text-diff-renderer-table.php
18.488KB
Delete
Edit
class-wp-textdomain-registry.php
10.235KB
Delete
Edit
class-wp-theme-json-data.php
1.767KB
Delete
Edit
class-wp-theme-json-resolver.php
34.855KB
Delete
Edit
class-wp-theme-json-schema.php
7.194KB
Delete
Edit
class-wp-theme-json.php
169.569KB
Delete
Edit
class-wp-theme.php
64.22KB
Delete
Edit
class-wp-token-map.php
27.947KB
Delete
Edit
class-wp-url-pattern-prefixer.php
4.689KB
Delete
Edit
class-wp-user-meta-session-tokens.php
2.885KB
Delete
Edit
class-wp-user-query.php
43.068KB
Delete
Edit
class-wp-user-request.php
2.251KB
Delete
Edit
class-wp-user.php
22.477KB
Delete
Edit
class-wp-walker.php
13.01KB
Delete
Edit
class-wp-widget-factory.php
3.269KB
Delete
Edit
class-wp-widget.php
17.985KB
Delete
Edit
class-wp-xmlrpc-server.php
209.98KB
Delete
Edit
class-wp.php
25.753KB
Delete
Edit
class.wp-dependencies.php
0.364KB
Delete
Edit
class.wp-scripts.php
0.335KB
Delete
Edit
class.wp-styles.php
0.33KB
Delete
Edit
collaboration.php
2.107KB
Delete
Edit
comment-template.php
100.792KB
Delete
Edit
compat-utf8.php
19.096KB
Delete
Edit
compat.php
15.687KB
Delete
Edit
connectors.php
23.516KB
Delete
Edit
cron.php
43.941KB
Delete
Edit
date.php
0.391KB
Delete
Edit
default-constants.php
11.099KB
Delete
Edit
default-filters.php
36.54KB
Delete
Edit
default-widgets.php
2.241KB
Delete
Edit
deprecated.php
189.431KB
Delete
Edit
embed-template.php
0.33KB
Delete
Edit
embed.php
37.994KB
Delete
Edit
feed-atom-comments.php
5.375KB
Delete
Edit
feed-atom.php
3.048KB
Delete
Edit
feed-rdf.php
2.605KB
Delete
Edit
feed-rss.php
1.161KB
Delete
Edit
feed-rss2-comments.php
4.039KB
Delete
Edit
feed-rss2.php
3.71KB
Delete
Edit
feed.php
24.599KB
Delete
Edit
fonts.php
9.561KB
Delete
Edit
formatting.php
346.377KB
Delete
Edit
functions.php
283.521KB
Delete
Edit
functions.wp-scripts.php
20.012KB
Delete
Edit
functions.wp-styles.php
8.451KB
Delete
Edit
general-template.php
170.834KB
Delete
Edit
global-styles-and-settings.php
20.293KB
Delete
Edit
http.php
26.616KB
Delete
Edit
https-detection.php
5.72KB
Delete
Edit
https-migration.php
4.63KB
Delete
Edit
kses.php
80.645KB
Delete
Edit
l10n.php
69.741KB
Delete
Edit
link-template.php
156.394KB
Delete
Edit
load.php
55.151KB
Delete
Edit
locale.php
0.158KB
Delete
Edit
media-template.php
61.792KB
Delete
Edit
media.php
218.549KB
Delete
Edit
meta.php
65.175KB
Delete
Edit
ms-blogs.php
25.714KB
Delete
Edit
ms-default-constants.php
4.806KB
Delete
Edit
ms-default-filters.php
6.48KB
Delete
Edit
ms-deprecated.php
21.24KB
Delete
Edit
ms-files.php
2.79KB
Delete
Edit
ms-functions.php
89.689KB
Delete
Edit
ms-load.php
19.568KB
Delete
Edit
ms-network.php
3.693KB
Delete
Edit
ms-settings.php
4.105KB
Delete
Edit
ms-site.php
40.751KB
Delete
Edit
nav-menu-template.php
25.381KB
Delete
Edit
nav-menu.php
43.231KB
Delete
Edit
option.php
102.616KB
Delete
Edit
pluggable-deprecated.php
6.176KB
Delete
Edit
pluggable.php
124.568KB
Delete
Edit
plugin.php
35.646KB
Delete
Edit
post-formats.php
6.904KB
Delete
Edit
post-template.php
67.007KB
Delete
Edit
post-thumbnail-template.php
10.624KB
Delete
Edit
query.php
36.226KB
Delete
Edit
registration-functions.php
0.195KB
Delete
Edit
registration.php
0.195KB
Delete
Edit
revision.php
29.992KB
Delete
Edit
rewrite.php
19.005KB
Delete
Edit
robots-template.php
5.063KB
Delete
Edit
rss-functions.php
0.249KB
Delete
Edit
rss.php
22.659KB
Delete
Edit
script-loader.php
159.303KB
Delete
Edit
script-modules.php
11.663KB
Delete
Edit
session.php
0.252KB
Delete
Edit
sitemaps.php
3.162KB
Delete
Edit
speculative-loading.php
8.398KB
Delete
Edit
spl-autoload-compat.php
0.431KB
Delete
Edit
style-engine.php
7.386KB
Delete
Edit
taxonomy.php
172.992KB
Delete
Edit
template-canvas.php
0.531KB
Delete
Edit
template-loader.php
4.167KB
Delete
Edit
template.php
35.961KB
Delete
Edit
theme-i18n.json
1.848KB
Delete
Edit
theme-previews.php
2.819KB
Delete
Edit
theme-templates.php
3.965KB
Delete
Edit
theme.json
8.825KB
Delete
Edit
theme.php
131.476KB
Delete
Edit
update.php
37.379KB
Delete
Edit
user.php
174.633KB
Delete
Edit
utf8.php
7.09KB
Delete
Edit
vars.php
6.452KB
Delete
Edit
version.php
1.104KB
Delete
Edit
view-transitions.php
0.588KB
Delete
Edit
widgets.php
69.168KB
Delete
Edit
wp-db.php
0.435KB
Delete
Edit
wp-diff.php
0.78KB
Delete
Edit
<?php /** * Base WordPress Image Editor * * @package WordPress * @subpackage Image_Editor */ /** * Base image editor class from which implementations extend * * @since 3.5.0 */ #[AllowDynamicProperties] abstract class WP_Image_Editor { protected $file = null; protected $size = null; protected $mime_type = null; protected $output_mime_type = null; protected $default_mime_type = 'image/jpeg'; protected $quality = false; // Deprecated since 5.8.1. See get_default_quality() below. protected $default_quality = 82; /** * Each instance handles a single file. * * @param string $file Path to the file to load. */ public function __construct( $file ) { $this->file = $file; } /** * Checks to see if current environment supports the editor chosen. * Must be overridden in a subclass. * * @since 3.5.0 * * @abstract * * @param array $args * @return bool */ public static function test( $args = array() ) { return false; } /** * Checks to see if editor supports the mime-type specified. * Must be overridden in a subclass. * * @since 3.5.0 * * @abstract * * @param string $mime_type * @return bool */ public static function supports_mime_type( $mime_type ) { return false; } /** * Loads image from $this->file into editor. * * @since 3.5.0 * * @return true|WP_Error True if loaded; WP_Error on failure. */ abstract public function load(); /** * Saves current image to file. * * @since 3.5.0 * @since 6.0.0 The `$filesize` value was added to the returned array. * * @param string $destfilename Optional. Destination filename. Default null. * @param string $mime_type Optional. The mime-type. Default null. * @return array|WP_Error { * Array on success or WP_Error if the file failed to save. * * @type string $path Path to the image file. * @type string $file Name of the image file. * @type int $width Image width. * @type int $height Image height. * @type string $mime-type The mime type of the image. * @type int $filesize File size of the image. * } */ abstract public function save( $destfilename = null, $mime_type = null ); /** * Resizes current image. * * At minimum, either a height or width must be provided. * If one of the two is set to null, the resize will * maintain aspect ratio according to the provided dimension. * * @since 3.5.0 * * @param int|null $max_w Image width. * @param int|null $max_h Image height. * @param bool|array $crop { * Optional. Image cropping behavior. If false, the image will be scaled (default). * If true, image will be cropped to the specified dimensions using center positions. * If an array, the image will be cropped using the array to specify the crop location: * * @type string $0 The x crop position. Accepts 'left', 'center', or 'right'. * @type string $1 The y crop position. Accepts 'top', 'center', or 'bottom'. * } * @return true|WP_Error */ abstract public function resize( $max_w, $max_h, $crop = false ); /** * Resize multiple images from a single source. * * @since 3.5.0 * * @param array $sizes { * An array of image size arrays. Default sizes are 'small', 'medium', 'large'. * * @type array ...$0 { * @type int $width Image width. * @type int $height Image height. * @type bool|array $crop Optional. Whether to crop the image. Default false. * } * } * @return array An array of resized images metadata by size. */ abstract public function multi_resize( $sizes ); /** * Crops Image. * * @since 3.5.0 * * @param int $src_x The start x position to crop from. * @param int $src_y The start y position to crop from. * @param int $src_w The width to crop. * @param int $src_h The height to crop. * @param int $dst_w Optional. The destination width. * @param int $dst_h Optional. The destination height. * @param bool $src_abs Optional. If the source crop points are absolute. * @return true|WP_Error */ abstract public function crop( $src_x, $src_y, $src_w, $src_h, $dst_w = null, $dst_h = null, $src_abs = false ); /** * Rotates current image counter-clockwise by $angle. * * @since 3.5.0 * * @param float $angle * @return true|WP_Error */ abstract public function rotate( $angle ); /** * Flips current image. * * @since 3.5.0 * * @param bool $horz Flip along Horizontal Axis * @param bool $vert Flip along Vertical Axis * @return true|WP_Error */ abstract public function flip( $horz, $vert ); /** * Streams current image to browser. * * @since 3.5.0 * * @param string $mime_type The mime type of the image. * @return true|WP_Error True on success, WP_Error object on failure. */ abstract public function stream( $mime_type = null ); /** * Gets dimensions of image. * * @since 3.5.0 * * @return int[] { * Dimensions of the image. * * @type int $width The image width. * @type int $height The image height. * } */ public function get_size() { return $this->size; } /** * Sets current image size. * * @since 3.5.0 * * @param int $width * @param int $height * @return true */ protected function update_size( $width = null, $height = null ) { $this->size = array( 'width' => (int) $width, 'height' => (int) $height, ); return true; } /** * Gets the Image Compression quality on a 1-100% scale. * * @since 4.0.0 * * @return int Compression Quality. Range: [1,100] */ public function get_quality() { if ( ! $this->quality ) { $this->set_quality(); } return $this->quality; } /** * Sets Image Compression quality on a 1-100% scale. * * @since 3.5.0 * @since 6.8.0 The `$dims` parameter was added. * * @param int $quality Compression Quality. Range: [1,100] * @param array $dims Optional. Image dimensions array with 'width' and 'height' keys. * @return true|WP_Error True if set successfully; WP_Error on failure. */ public function set_quality( $quality = null, $dims = array() ) { // Use the output mime type if present. If not, fall back to the input/initial mime type. $mime_type = ! empty( $this->output_mime_type ) ? $this->output_mime_type : $this->mime_type; // Get the default quality setting for the mime type. $default_quality = $this->get_default_quality( $mime_type ); if ( null === $quality ) { /** * Filters the default image compression quality setting. * * Applies only during initial editor instantiation, or when set_quality() is run * manually without the `$quality` argument. * * The WP_Image_Editor::set_quality() method has priority over the filter. * * @since 3.5.0 * @since 6.8.0 Added the `$size` parameter. * * @param int $quality Quality level between 1 (low) and 100 (high). * @param string $mime_type Image mime type. * @param array $size { * Dimensions of the image. * * @type int $width The image width. * @type int $height The image height. * } */ $quality = apply_filters( 'wp_editor_set_quality', $default_quality, $mime_type, $dims ? $dims : $this->size ); if ( 'image/jpeg' === $mime_type ) { /** * Filters the JPEG compression quality for backward-compatibility. * * Applies only during initial editor instantiation, or when set_quality() is run * manually without the `$quality` argument. * * The WP_Image_Editor::set_quality() method has priority over the filter. * * The filter is evaluated under two contexts: 'image_resize', and 'edit_image', * (when a JPEG image is saved to file). * * @since 2.5.0 * * @param int $quality Quality level between 0 (low) and 100 (high) of the JPEG. * @param string $context Context of the filter. */ $quality = apply_filters( 'jpeg_quality', $quality, 'image_resize' ); } if ( $quality < 0 || $quality > 100 ) { $quality = $default_quality; } } // Allow 0, but squash to 1 due to identical images in GD, and for backward compatibility. if ( 0 === $quality ) { $quality = 1; } if ( ( $quality >= 1 ) && ( $quality <= 100 ) ) { $this->quality = $quality; return true; } else { return new WP_Error( 'invalid_image_quality', __( 'Attempted to set image quality outside of the range [1,100].' ) ); } } /** * Returns the default compression quality setting for the mime type. * * @since 5.8.1 * * @param string $mime_type * @return int The default quality setting for the mime type. */ protected function get_default_quality( $mime_type ) { switch ( $mime_type ) { case 'image/webp': $quality = 86; break; case 'image/jpeg': default: $quality = $this->default_quality; } return $quality; } /** * Returns preferred mime-type and extension based on provided * file's extension and mime, or current file's extension and mime. * * Will default to $this->default_mime_type if requested is not supported. * * Provides corrected filename only if filename is provided. * * @since 3.5.0 * * @param string $filename * @param string $mime_type * @return array { filename|null, extension, mime-type } */ protected function get_output_format( $filename = null, $mime_type = null ) { $new_ext = null; // By default, assume specified type takes priority. if ( $mime_type ) { $new_ext = $this->get_extension( $mime_type ); } if ( $filename ) { $file_ext = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) ); $file_mime = $this->get_mime_type( $file_ext ); } else { // If no file specified, grab editor's current extension and mime-type. $file_ext = strtolower( pathinfo( $this->file, PATHINFO_EXTENSION ) ); $file_mime = $this->mime_type; } /* * Check to see if specified mime-type is the same as type implied by * file extension. If so, prefer extension from file. */ if ( ! $mime_type || ( $file_mime === $mime_type ) ) { $mime_type = $file_mime; $new_ext = $file_ext; } $output_format = wp_get_image_editor_output_format( $filename, $mime_type ); if ( isset( $output_format[ $mime_type ] ) && $this->supports_mime_type( $output_format[ $mime_type ] ) ) { $mime_type = $output_format[ $mime_type ]; $new_ext = $this->get_extension( $mime_type ); } /* * Double-check that the mime-type selected is supported by the editor. * If not, choose a default instead. */ if ( ! $this->supports_mime_type( $mime_type ) ) { /** * Filters default mime type prior to getting the file extension. * * @see wp_get_mime_types() * * @since 3.5.0 * * @param string $mime_type Mime type string. */ $mime_type = apply_filters( 'image_editor_default_mime_type', $this->default_mime_type ); $new_ext = $this->get_extension( $mime_type ); } /* * Ensure both $filename and $new_ext are not empty. * $this->get_extension() returns false on error which would effectively remove the extension * from $filename. That shouldn't happen, files without extensions are not supported. */ if ( $filename && $new_ext ) { $dir = pathinfo( $filename, PATHINFO_DIRNAME ); $ext = pathinfo( $filename, PATHINFO_EXTENSION ); $filename = trailingslashit( $dir ) . wp_basename( $filename, ".$ext" ) . ".{$new_ext}"; } if ( $mime_type && ( $mime_type !== $this->mime_type ) ) { // The image will be converted when saving. Set the quality for the new mime-type if not already set. if ( $mime_type !== $this->output_mime_type ) { $this->output_mime_type = $mime_type; } $this->set_quality(); } elseif ( ! empty( $this->output_mime_type ) ) { // Reset output_mime_type and quality. $this->output_mime_type = null; $this->set_quality(); } return array( $filename, $new_ext, $mime_type ); } /** * Builds an output filename based on current file, and adding proper suffix * * @since 3.5.0 * @since 6.8.0 Passing an empty string as $suffix will now omit the suffix from the generated filename. * * @param string $suffix * @param string $dest_path * @param string $extension * @return string filename */ public function generate_filename( $suffix = null, $dest_path = null, $extension = null ) { // If not empty the $suffix will be appended to the destination filename, just before the extension. if ( $suffix ) { $suffix = '-' . $suffix; } elseif ( '' !== $suffix ) { $suffix = '-' . $this->get_suffix(); } $dir = pathinfo( $this->file, PATHINFO_DIRNAME ); $ext = pathinfo( $this->file, PATHINFO_EXTENSION ); $name = wp_basename( $this->file, ".$ext" ); $new_ext = strtolower( $extension ? $extension : $ext ); if ( ! is_null( $dest_path ) ) { if ( ! wp_is_stream( $dest_path ) ) { $_dest_path = realpath( $dest_path ); if ( $_dest_path ) { $dir = $_dest_path; } } else { $dir = $dest_path; } } return trailingslashit( $dir ) . "{$name}{$suffix}.{$new_ext}"; } /** * Builds and returns proper suffix for file based on height and width. * * @since 3.5.0 * * @return string|false suffix */ public function get_suffix() { if ( ! $this->get_size() ) { return false; } return "{$this->size['width']}x{$this->size['height']}"; } /** * Check if a JPEG image has EXIF Orientation tag and rotate it if needed. * * @since 5.3.0 * * @return bool|WP_Error True if the image was rotated. False if not rotated (no EXIF data or the image doesn't need to be rotated). * WP_Error if error while rotating. */ public function maybe_exif_rotate() { $orientation = null; if ( is_callable( 'exif_read_data' ) && 'image/jpeg' === $this->mime_type ) { $exif_data = @exif_read_data( $this->file ); if ( ! empty( $exif_data['Orientation'] ) ) { $orientation = (int) $exif_data['Orientation']; } } /** * Filters the `$orientation` value to correct it before rotating or to prevent rotating the image. * * @since 5.3.0 * * @param int $orientation EXIF Orientation value as retrieved from the image file. * @param string $file Path to the image file. */ $orientation = apply_filters( 'wp_image_maybe_exif_rotate', $orientation, $this->file ); if ( ! $orientation || 1 === $orientation ) { return false; } switch ( $orientation ) { case 2: // Flip horizontally. $result = $this->flip( false, true ); break; case 3: /* * Rotate 180 degrees or flip horizontally and vertically. * Flipping seems faster and uses less resources. */ $result = $this->flip( true, true ); break; case 4: // Flip vertically. $result = $this->flip( true, false ); break; case 5: // Rotate 90 degrees counter-clockwise and flip vertically. $result = $this->rotate( 90 ); if ( ! is_wp_error( $result ) ) { $result = $this->flip( true, false ); } break; case 6: // Rotate 90 degrees clockwise (270 counter-clockwise). $result = $this->rotate( 270 ); break; case 7: // Rotate 90 degrees counter-clockwise and flip horizontally. $result = $this->rotate( 90 ); if ( ! is_wp_error( $result ) ) { $result = $this->flip( false, true ); } break; case 8: // Rotate 90 degrees counter-clockwise. $result = $this->rotate( 90 ); break; } return $result; } /** * Either calls editor's save function or handles file as a stream. * * @since 3.5.0 * * @param string $filename * @param callable $callback * @param array $arguments * @return bool */ protected function make_image( $filename, $callback, $arguments ) { $stream = wp_is_stream( $filename ); if ( $stream ) { ob_start(); } else { // The directory containing the original file may no longer exist when using a replication plugin. wp_mkdir_p( dirname( $filename ) ); } $result = call_user_func_array( $callback, $arguments ); if ( $result && $stream ) { $contents = ob_get_contents(); $fp = fopen( $filename, 'w' ); if ( ! $fp ) { ob_end_clean(); return false; } fwrite( $fp, $contents ); fclose( $fp ); } if ( $stream ) { ob_end_clean(); } return $result; } /** * Returns first matched mime-type from extension, * as mapped from wp_get_mime_types() * * @since 3.5.0 * * @param string $extension * @return string|false */ protected static function get_mime_type( $extension = null ) { if ( ! $extension ) { return false; } $mime_types = wp_get_mime_types(); $extensions = array_keys( $mime_types ); foreach ( $extensions as $_extension ) { if ( preg_match( "/{$extension}/i", $_extension ) ) { return $mime_types[ $_extension ]; } } return false; } /** * Returns first matched extension from Mime-type, * as mapped from wp_get_mime_types() * * @since 3.5.0 * * @param string $mime_type * @return string|false */ protected static function get_extension( $mime_type = null ) { if ( empty( $mime_type ) ) { return false; } return wp_get_default_extension_for_mime_type( $mime_type ); } }