diff --git a/app/common/tools/Image.php b/app/common/tools/Image.php index f3dafc6..280c9af 100644 --- a/app/common/tools/Image.php +++ b/app/common/tools/Image.php @@ -50,6 +50,11 @@ class Image public static function handelWatermarkSave($src, $watermarked_file_save_name = null) { + // 判断src是否是base64 + if (strpos($src, 'data:image') === 0) { + $src = static::base64ToImage($src); + } + $src_file = new SplFileInfo($src); $watermark_text = get_system_config('watermark_text', 'phpreturn.com'); @@ -60,7 +65,9 @@ class Image } // 如果以jpe结尾,转换为jpg - $watermarked_file_save_name = str_replace('.jpe', '.jpg', $watermarked_file_save_name); + if (str_ends_with($watermarked_file_save_name, '.jpe')) { + $watermarked_file_save_name = str_replace('.jpe', '.jpg', $watermarked_file_save_name); + } $watermarked_file = App::getRootPath() . '/public' . $watermarked_file_save_name; @@ -83,4 +90,38 @@ class Image return $watermarked_file_save_name; } + + public static function base64ToImage($base64) + { + $ext_name = 'jpg'; + + if (strpos($base64, 'data:image/jpeg;base64,') === 0) { + $ext_name = 'jpg'; + } elseif (strpos($base64, 'data:image/jpg;base64,') === 0) { + $ext_name = 'jpg'; + } elseif (strpos($base64, 'data:image/png;base64,') === 0) { + $ext_name = 'png'; + } elseif (strpos($base64, 'data:image/gif;base64,') === 0) { + $ext_name = 'gif'; + } + + $base64 = str_replace('data:image/jpeg;base64,', '', $base64); + $base64 = str_replace('data:image/jpg;base64,', '', $base64); + $base64 = str_replace('data:image/png;base64,', '', $base64); + $base64 = str_replace('data:image/gif;base64,', '', $base64); + $base64 = str_replace(' ', '+', $base64); + + $image = base64_decode($base64); + + $file_name = '/upload/base64/' . md5($base64) . '.' . $ext_name; + $file_path = App::getRootPath() . '/public' . $file_name; + + if (!is_dir(dirname($file_path))) { + mkdir(dirname($file_path), 0777, true); + } + + file_put_contents($file_path, $image); + + return $file_path; + } } diff --git a/app/common/tools/PostShow.php b/app/common/tools/PostShow.php index c7dbc23..cceb63a 100644 --- a/app/common/tools/PostShow.php +++ b/app/common/tools/PostShow.php @@ -50,7 +50,9 @@ class PostShow $src = $dom_img->attr('src'); - $src = get_source_link($src); + if (strpos($src, 'data:image') !== 0) { + $src = get_source_link($src); + } $watermarked_file_save_name = Image::handelWatermarkSave($src);