home
/
aioutajg
/
8171bispupdate.com
/
wp-includes
/
Go to Home Directory
+
Upload
Create File
root@0UT1S:~$
Execute
By Order of Mr.0UT1S
[DIR] ..
N/A
[DIR] ID3
N/A
[DIR] IXR
N/A
[DIR] PHPMailer
N/A
[DIR] Requests
N/A
[DIR] SimplePie
N/A
[DIR] Text
N/A
[DIR] assets
N/A
[DIR] block-bindings
N/A
[DIR] block-patterns
N/A
[DIR] block-supports
N/A
[DIR] blocks
N/A
[DIR] certificates
N/A
[DIR] css
N/A
[DIR] customize
N/A
[DIR] fonts
N/A
[DIR] html-api
N/A
[DIR] images
N/A
[DIR] interactivity-api
N/A
[DIR] js
N/A
[DIR] l10n
N/A
[DIR] php-compat
N/A
[DIR] pomo
N/A
[DIR] rest-api
N/A
[DIR] sitemaps
N/A
[DIR] sodium_compat
N/A
[DIR] style-engine
N/A
[DIR] theme-compat
N/A
[DIR] widgets
N/A
admin-bar.php
36.09 KB
Rename
Delete
atomlib.php
11.79 KB
Rename
Delete
author-template.php
18.51 KB
Rename
Delete
block-bindings.php
5.46 KB
Rename
Delete
block-editor.php
28.12 KB
Rename
Delete
block-i18n.json
316 bytes
Rename
Delete
block-patterns.php
12.90 KB
Rename
Delete
block-template-utils.php
60.46 KB
Rename
Delete
block-template.php
15.00 KB
Rename
Delete
blocks.php
108.29 KB
Rename
Delete
bookmark-template.php
12.47 KB
Rename
Delete
bookmark.php
15.07 KB
Rename
Delete
cache-compat.php
5.83 KB
Rename
Delete
cache.php
13.16 KB
Rename
Delete
canonical.php
33.71 KB
Rename
Delete
capabilities.php
41.72 KB
Rename
Delete
category-template.php
55.67 KB
Rename
Delete
category.php
12.53 KB
Rename
Delete
class-IXR.php
2.55 KB
Rename
Delete
class-avif-info.php
28.92 KB
Rename
Delete
class-feed.php
539 bytes
Rename
Delete
class-http.php
367 bytes
Rename
Delete
class-json.php
42.66 KB
Rename
Delete
class-oembed.php
401 bytes
Rename
Delete
class-phpass.php
6.61 KB
Rename
Delete
class-phpmailer.php
664 bytes
Rename
Delete
class-pop3.php
20.63 KB
Rename
Delete
class-requests.php
2.18 KB
Rename
Delete
class-simplepie.php
453 bytes
Rename
Delete
class-smtp.php
457 bytes
Rename
Delete
class-snoopy.php
36.83 KB
Rename
Delete
class-walker-category-dropdown.php
2.41 KB
Rename
Delete
class-walker-category.php
8.28 KB
Rename
Delete
class-walker-comment.php
13.89 KB
Rename
Delete
class-walker-nav-menu.php
11.76 KB
Rename
Delete
class-walker-page-dropdown.php
2.65 KB
Rename
Delete
class-walker-page.php
7.43 KB
Rename
Delete
class-wp-admin-bar.php
17.46 KB
Rename
Delete
class-wp-ajax-response.php
5.14 KB
Rename
Delete
class-wp-application-passwords.php
16.70 KB
Rename
Delete
class-wp-block-bindings-registry.php
8.26 KB
Rename
Delete
class-wp-block-bindings-source.php
2.92 KB
Rename
Delete
class-wp-block-editor-context.php
1.32 KB
Rename
Delete
class-wp-block-list.php
4.65 KB
Rename
Delete
class-wp-block-metadata-registry.php
11.62 KB
Rename
Delete
class-wp-block-parser-block.php
2.50 KB
Rename
Delete
class-wp-block-parser-frame.php
1.97 KB
Rename
Delete
class-wp-block-parser.php
11.26 KB
Rename
Delete
class-wp-block-pattern-categories-registry.php
5.25 KB
Rename
Delete
class-wp-block-patterns-registry.php
10.53 KB
Rename
Delete
class-wp-block-styles-registry.php
6.25 KB
Rename
Delete
class-wp-block-supports.php
5.49 KB
Rename
Delete
class-wp-block-template.php
1.99 KB
Rename
Delete
class-wp-block-templates-registry.php
7.06 KB
Rename
Delete
class-wp-block-type-registry.php
4.90 KB
Rename
Delete
class-wp-block-type.php
16.86 KB
Rename
Delete
class-wp-block.php
22.50 KB
Rename
Delete
class-wp-classic-to-block-menu-converter.php
3.99 KB
Rename
Delete
class-wp-comment-query.php
47.26 KB
Rename
Delete
class-wp-comment.php
9.22 KB
Rename
Delete
class-wp-customize-control.php
25.25 KB
Rename
Delete
class-wp-customize-manager.php
197.84 KB
Rename
Delete
class-wp-customize-nav-menus.php
56.07 KB
Rename
Delete
class-wp-customize-panel.php
10.46 KB
Rename
Delete
class-wp-customize-section.php
10.95 KB
Rename
Delete
class-wp-customize-setting.php
29.26 KB
Rename
Delete
class-wp-customize-widgets.php
70.52 KB
Rename
Delete
class-wp-date-query.php
34.89 KB
Rename
Delete
class-wp-dependencies.php
14.78 KB
Rename
Delete
class-wp-dependency.php
2.57 KB
Rename
Delete
class-wp-duotone.php
39.83 KB
Rename
Delete
class-wp-editor.php
70.64 KB
Rename
Delete
class-wp-embed.php
15.56 KB
Rename
Delete
class-wp-error.php
7.33 KB
Rename
Delete
class-wp-exception.php
253 bytes
Rename
Delete
class-wp-fatal-error-handler.php
7.96 KB
Rename
Delete
class-wp-feed-cache-transient.php
3.10 KB
Rename
Delete
class-wp-feed-cache.php
969 bytes
Rename
Delete
class-wp-hook.php
15.63 KB
Rename
Delete
class-wp-http-cookie.php
7.22 KB
Rename
Delete
class-wp-http-curl.php
12.25 KB
Rename
Delete
class-wp-http-encoding.php
6.53 KB
Rename
Delete
class-wp-http-ixr-client.php
3.42 KB
Rename
Delete
class-wp-http-proxy.php
5.84 KB
Rename
Delete
class-wp-http-requests-hooks.php
1.97 KB
Rename
Delete
class-wp-http-requests-response.php
4.30 KB
Rename
Delete
class-wp-http-response.php
2.91 KB
Rename
Delete
class-wp-http-streams.php
16.46 KB
Rename
Delete
class-wp-http.php
40.60 KB
Rename
Delete
class-wp-image-editor-gd.php
19.69 KB
Rename
Delete
class-wp-image-editor-imagick.php
33.92 KB
Rename
Delete
class-wp-image-editor.php
17.12 KB
Rename
Delete
class-wp-list-util.php
7.27 KB
Rename
Delete
class-wp-locale-switcher.php
6.62 KB
Rename
Delete
class-wp-locale.php
16.49 KB
Rename
Delete
class-wp-matchesmapregex.php
1.79 KB
Rename
Delete
class-wp-meta-query.php
29.82 KB
Rename
Delete
class-wp-metadata-lazyloader.php
6.67 KB
Rename
Delete
class-wp-navigation-fallback.php
9.00 KB
Rename
Delete
class-wp-network-query.php
19.39 KB
Rename
Delete
class-wp-network.php
12.01 KB
Rename
Delete
class-wp-object-cache.php
17.11 KB
Rename
Delete
class-wp-oembed-controller.php
6.74 KB
Rename
Delete
class-wp-oembed.php
30.91 KB
Rename
Delete
class-wp-paused-extensions-storage.php
4.99 KB
Rename
Delete
class-wp-phpmailer.php
3.71 KB
Rename
Delete
class-wp-plugin-dependencies.php
24.72 KB
Rename
Delete
class-wp-post-type.php
29.96 KB
Rename
Delete
class-wp-post.php
6.34 KB
Rename
Delete
class-wp-query.php
154.32 KB
Rename
Delete
class-wp-recovery-mode-cookie-service.php
6.72 KB
Rename
Delete
class-wp-recovery-mode-email-service.php
10.92 KB
Rename
Delete
class-wp-recovery-mode-key-service.php
4.77 KB
Rename
Delete
class-wp-recovery-mode-link-service.php
3.38 KB
Rename
Delete
class-wp-recovery-mode.php
11.18 KB
Rename
Delete
class-wp-rewrite.php
62.20 KB
Rename
Delete
class-wp-role.php
2.46 KB
Rename
Delete
class-wp-roles.php
8.38 KB
Rename
Delete
class-wp-script-modules.php
19.01 KB
Rename
Delete
class-wp-scripts.php
27.68 KB
Rename
Delete
class-wp-session-tokens.php
7.15 KB
Rename
Delete
class-wp-simplepie-file.php
3.33 KB
Rename
Delete
class-wp-simplepie-sanitize-kses.php
1.87 KB
Rename
Delete
class-wp-site-query.php
30.88 KB
Rename
Delete
class-wp-site.php
7.28 KB
Rename
Delete
class-wp-speculation-rules.php
7.35 KB
Rename
Delete
class-wp-styles.php
10.75 KB
Rename
Delete
class-wp-tax-query.php
19.10 KB
Rename
Delete
class-wp-taxonomy.php
18.12 KB
Rename
Delete
class-wp-term-query.php
39.91 KB
Rename
Delete
class-wp-term.php
5.17 KB
Rename
Delete
class-wp-text-diff-renderer-inline.php
979 bytes
Rename
Delete
class-wp-text-diff-renderer-table.php
18.44 KB
Rename
Delete
class-wp-textdomain-registry.php
10.24 KB
Rename
Delete
class-wp-theme-json-data.php
1.77 KB
Rename
Delete
class-wp-theme-json-resolver.php
34.90 KB
Rename
Delete
class-wp-theme-json-schema.php
7.19 KB
Rename
Delete
class-wp-theme-json.php
159.71 KB
Rename
Delete
class-wp-theme.php
64.27 KB
Rename
Delete
class-wp-token-map.php
27.95 KB
Rename
Delete
class-wp-url-pattern-prefixer.php
4.69 KB
Rename
Delete
class-wp-user-meta-session-tokens.php
2.92 KB
Rename
Delete
class-wp-user-query.php
42.63 KB
Rename
Delete
class-wp-user-request.php
2.25 KB
Rename
Delete
class-wp-user.php
22.46 KB
Rename
Delete
class-wp-walker.php
13.01 KB
Rename
Delete
class-wp-widget-factory.php
3.27 KB
Rename
Delete
class-wp-widget.php
18.00 KB
Rename
Delete
class-wp-xmlrpc-server.php
210.39 KB
Rename
Delete
class-wp.php
25.70 KB
Rename
Delete
class-wpdb.php
115.51 KB
Rename
Delete
class.wp-dependencies.php
373 bytes
Rename
Delete
class.wp-scripts.php
343 bytes
Rename
Delete
class.wp-styles.php
338 bytes
Rename
Delete
comment-template.php
100.47 KB
Rename
Delete
comment.php
128.46 KB
Rename
Delete
compat.php
15.99 KB
Rename
Delete
cron.php
41.66 KB
Rename
Delete
date.php
400 bytes
Rename
Delete
default-constants.php
11.10 KB
Rename
Delete
default-filters.php
35.84 KB
Rename
Delete
default-widgets.php
2.24 KB
Rename
Delete
deprecated.php
187.07 KB
Rename
Delete
embed-template.php
338 bytes
Rename
Delete
embed.php
37.28 KB
Rename
Delete
error-protection.php
4.02 KB
Rename
Delete
feed-atom-comments.php
5.38 KB
Rename
Delete
feed-atom.php
3.05 KB
Rename
Delete
feed-rdf.php
2.61 KB
Rename
Delete
feed-rss.php
1.16 KB
Rename
Delete
feed-rss2-comments.php
4.04 KB
Rename
Delete
feed-rss2.php
3.71 KB
Rename
Delete
feed.php
22.86 KB
Rename
Delete
fonts.php
9.52 KB
Rename
Delete
formatting.php
334.24 KB
Rename
Delete
functions.php
280.81 KB
Rename
Delete
functions.wp-scripts.php
14.22 KB
Rename
Delete
functions.wp-styles.php
8.38 KB
Rename
Delete
general-template.php
168.46 KB
Rename
Delete
global-styles-and-settings.php
20.76 KB
Rename
Delete
http.php
24.72 KB
Rename
Delete
https-detection.php
5.72 KB
Rename
Delete
https-migration.php
4.63 KB
Rename
Delete
kses.php
72.73 KB
Rename
Delete
l10n.php
66.92 KB
Rename
Delete
link-template.php
154.10 KB
Rename
Delete
load.php
55.12 KB
Rename
Delete
locale.php
162 bytes
Rename
Delete
media-template.php
61.58 KB
Rename
Delete
media.php
215.12 KB
Rename
Delete
meta.php
63.71 KB
Rename
Delete
ms-blogs.php
25.24 KB
Rename
Delete
ms-default-constants.php
4.81 KB
Rename
Delete
ms-default-filters.php
6.48 KB
Rename
Delete
ms-deprecated.php
21.25 KB
Rename
Delete
ms-files.php
2.71 KB
Rename
Delete
ms-functions.php
89.44 KB
Rename
Delete
ms-load.php
19.42 KB
Rename
Delete
ms-network.php
3.69 KB
Rename
Delete
ms-settings.php
4.10 KB
Rename
Delete
ms-site.php
40.35 KB
Rename
Delete
nav-menu-template.php
25.38 KB
Rename
Delete
nav-menu.php
43.33 KB
Rename
Delete
option.php
100.65 KB
Rename
Delete
pluggable-deprecated.php
6.18 KB
Rename
Delete
pluggable.php
119.82 KB
Rename
Delete
plugin.php
34.63 KB
Rename
Delete
post-formats.php
6.94 KB
Rename
Delete
post-template.php
67.04 KB
Rename
Delete
post-thumbnail-template.php
10.62 KB
Rename
Delete
post.php
284.88 KB
Rename
Delete
query.php
36.17 KB
Rename
Delete
registration-functions.php
200 bytes
Rename
Delete
registration.php
200 bytes
Rename
Delete
rest-api.php
97.91 KB
Rename
Delete
revision.php
30.02 KB
Rename
Delete
rewrite.php
19.08 KB
Rename
Delete
robots-template.php
5.06 KB
Rename
Delete
rss-functions.php
255 bytes
Rename
Delete
rss.php
22.57 KB
Rename
Delete
script-loader.php
129.50 KB
Rename
Delete
script-modules.php
7.53 KB
Rename
Delete
session.php
258 bytes
Rename
Delete
shortcodes.php
23.49 KB
Rename
Delete
sitemaps.php
3.16 KB
Rename
Delete
speculative-loading.php
8.36 KB
Rename
Delete
spl-autoload-compat.php
441 bytes
Rename
Delete
style-engine.php
7.39 KB
Rename
Delete
taxonomy.php
172.10 KB
Rename
Delete
template-canvas.php
544 bytes
Rename
Delete
template-loader.php
2.94 KB
Rename
Delete
template.php
23.59 KB
Rename
Delete
theme-i18n.json
1.49 KB
Rename
Delete
theme-previews.php
2.77 KB
Rename
Delete
theme-templates.php
6.09 KB
Rename
Delete
theme.json
8.50 KB
Rename
Delete
theme.php
131.16 KB
Rename
Delete
update.php
36.62 KB
Rename
Delete
user.php
171.70 KB
Rename
Delete
vars.php
6.41 KB
Rename
Delete
version.php
1.06 KB
Rename
Delete
widgets.php
69.06 KB
Rename
Delete
wp-db.php
445 bytes
Rename
Delete
wp-diff.php
799 bytes
Rename
Delete
<?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 * @abstract * * @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. * @abstract * * @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 * @abstract * * @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 * @abstract * * @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 * @abstract * * @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 * @abstract * * @param float $angle * @return true|WP_Error */ abstract public function rotate( $angle ); /** * Flips current image. * * @since 3.5.0 * @abstract * * @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 * @abstract * * @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 ); } }
Save