PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.13.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.13.0
4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / core / app-core / src / Image / Image.php
surecart / core / app-core / src / Image Last commit date
Image.php 3 years ago ImageServiceProvider.php 3 years ago
Image.php
100 lines
1 <?php
2 /**
3 * @package SureCartAppCore
4 * @author SureCart <support@surecart.com>
5 * @copyright SureCart
6 * @license https://www.gnu.org/licenses/gpl-2.0.html GPL-2.0
7 * @link https://surecart.com
8 */
9
10 namespace SureCartAppCore\Image;
11
12 use SureCartCore\Helpers\MixedType;
13
14 class Image {
15 /**
16 * Get a suitable name for a resized version of an image file.
17 *
18 * @param string $filepath
19 * @param integer $width
20 * @param integer $height
21 * @param boolean $crop
22 * @return string
23 */
24 protected function getResizedFilename( $filepath, $width, $height, $crop ) {
25 $filename = basename( $filepath );
26
27 // match filename extension with dot
28 // only the last extension will match when there are multiple ones
29 $extension_pattern = '/(\.[^\.]+)$/';
30
31 // add width, height and crop to filename
32 $replacement = '-' . $width . 'x' . $height . ( $crop ? '-cropped' : '' ) . '$1';
33
34 return preg_replace( $extension_pattern, $replacement, $filename );
35 }
36
37 /**
38 * Resize and store a copy of an image file.
39 *
40 * @param string $source
41 * @param string $destination
42 * @param integer $width
43 * @param integer $height
44 * @param boolean $crop
45 * @return string
46 */
47 protected function store( $source, $destination, $width, $height, $crop ) {
48 if ( file_exists( $destination ) ) {
49 return $destination;
50 }
51
52 $editor = wp_get_image_editor( $source );
53
54 if ( is_wp_error( $editor ) ) {
55 return '';
56 }
57
58 $editor->resize( $width, $height, $crop );
59 $editor->save( $destination );
60
61 return $destination;
62 }
63
64 /**
65 * Dynamically generate a thumbnail (if one is not already available) and return the url.
66 *
67 * @param integer $attachment_id
68 * @param integer $width
69 * @param integer $height
70 * @param boolean $crop
71 * @return string
72 */
73 public function thumbnail( $attachment_id, $width, $height, $crop = true ) {
74 $width = absint( $width );
75 $height = absint( $height );
76
77 $upload_dir = wp_upload_dir();
78 $attachment = wp_get_attachment_metadata( $attachment_id );
79 $source = MixedType::normalizePath( get_attached_file( $attachment_id ) );
80
81 if ( ! $attachment || ! file_exists( $source ) ) {
82 return '';
83 }
84
85 $attachment_subdirectory = preg_replace( '/\/?[^\/]+\z/', '', $attachment['file'] );
86 $filename = $this->getResizedFilename( $source, $width, $height, $crop );
87 $destination = MixedType::normalizePath( MixedType::normalizePath( $upload_dir['basedir'] ) . DIRECTORY_SEPARATOR . $attachment_subdirectory ) . DIRECTORY_SEPARATOR . $filename;
88
89 $stored = $this->store( $source, $destination, $width, $height, $crop );
90
91 if ( empty( $stored ) ) {
92 return '';
93 }
94
95 $fileurl = trailingslashit( $upload_dir['baseurl'] ) . $attachment_subdirectory . '/' . $filename;
96
97 return $fileurl;
98 }
99 }
100