图片处理 - PHP 工具类
<?php
/**
* Created by PhpStorm.
* User: peeke
* Date: 2020/4/22
* Time: 08:53
*/
namespace App\common\Helpers\tools;
class ImageHelper
{
/**
* 增加图片样式,防止图片在手机端显示溢出
*
* @param $content
* @return string
*/
public static function mobileShow($content)
{
return "<style>img{width:100%}</style>" . self::removeWidthAndHeight($content);
}
/**
* 移除图片宽高
*
* @param $content
* @return string
*/
public static function removeWidthAndHeight($content)
{
$content = strtolower($content);
$content = preg_replace("/(<img.*?)?width[ ]*=[ ]*['|\"]?\S+['|\"]?(.*?\/>)/", '$1$2', $content);
$content = preg_replace("/(<img.*?)?height[ ]*=[ ]*['|\"]?\S+['|\"]?(.*?\/>)/", '$1$2', $content);
$content = preg_replace("/(<img.*)+.*?width[ ]*:[ ]*\S*?([;| |\"|\']+.*?\/>)+/", '$1$2', $content);
$content = preg_replace("/(<img.*)+.*?height[ ]*:[ ]*\S*?([;| |\"|\']+.*?\/>)+/", '$1$2', $content);
return $content;
}
/**
* 获取图片地址
*
* @param $path
* @return string
*/
public static function getImageUrl($path)
{
//dd(env("OSS_BINDING_DOMAIN",env("IMAGES_DOMAIN")).$path);
return env("OSS_BINDING_DOMAIN", env("IMAGES_DOMAIN")) . $path;
}
/**
* 获取缩略图地址
*
* @param $path
* @return string
*/
public static function getImageUrlThumbnail($path)
{
if (empty($path)) {
return '';
}
return env("OSS_BINDING_DOMAIN", env("IMAGES_DOMAIN")) . $path . env("oss_img_style", "?x-oss-process=style/percent-50");
}
/**
* 获取图片OSS地址
*
* @param $path
* @return string
*/
public static function getOssImageUrl($path)
{
return env("OSS_BINDING_DOMAIN") . $path;
}
/**
* 获取图片的真实路径
*
* @param $path
* @return string
*/
public static function getImagePath($path)
{
$dir = env("PUBLIC_PATH", public_path() . DIRECTORY_SEPARATOR);
return $dir . $path;
}
/**
* 将图片转换成所需的图片格式
*
* @param $srcFile 图片来源路径
* @param $dstExt 转成后的图片路径
* @param $quality 质量值
* @return bool|false|string
*/
public static function convertPic($srcFile, $dstExt = 'jpg', $percent = 1, $quality = 100, $isremote = true)
{
if (!in_array($dstExt, ['jpg', 'png', 'webp'])) {
return false;
}
if ($isremote) {
$reaFile = UrlHelper::imagesUrl($srcFile);
} else {
$reaFile = $srcFile;
}
//$reaFile = "http://static.yiquantong.vip/upload/users/2021/06/01/2021060115580885910423290.jpg";
// 2021060115580885910423290
if (!is_file($reaFile)) {
//return false;
}
$srcType = getimagesize($reaFile);
$fileInfo = pathinfo($reaFile);
//dd($fileInfo);
$dirname = rtrim($fileInfo['dirname'], '/') . '/';
//dd($dirname);
$filename = $fileInfo['filename'];
list($width, $height, $imgType) = $srcType;
$im = null;
// 1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP
switch ($imgType) {
case 1:
$im = imagecreatefromgif($reaFile);
break;
case 2:
$im = imagecreatefromjpeg($reaFile);
break;
case 3:
$im = imagecreatefrompng($reaFile);
break;
case 18:
//$im = imagecreatetruecolor(120, 20);
$im = imagecreatefromwebp($reaFile);
break;
}
// 重新取样P
$newWidth = $width * $percent;
$newHeight = $height * $percent;
$imageP = imagecreatetruecolor($newWidth, $newHeight);
imagecopyresampled($imageP, $im, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
$imageFunction = 'imagejpeg';
if ($dstExt != 'jpg') {
$imageFunction = 'image' . $dstExt;
}
$savePath = null;
if ($savePath) {
$imgInfo = $imageFunction($im, $savePath, $quality);
//return $savePath;
} else {
$savePath = public_path('upload/users/' . 'convert_' . $filename . '.' . $dstExt);
$imgInfo = $imageFunction($imageP, $savePath, $quality);
//return $savePath;
//$newFilecontent = file_get_contents($newDir);
}
imagedestroy($im);
return $savePath;
}
/**
* 将图片转换成所需的图片格式
*
* @param $srcFile 图片来源路径
* @param string $dstExt 转成后的图片路径
* @param int $percent
* @param int $quality 质量值
* @return bool|false|string
*/
public static function convertLocalPic($srcFile, $dstExt = 'jpg', $percent = 1, $quality = 100)
{
if (!in_array($dstExt, ['jpg', 'png'])) {
return false;
}
$reaFile = $srcFile;
$srcType = getimagesize($reaFile);
$fileInfo = pathinfo($reaFile);
//dd($fileInfo);
$dirname = rtrim($fileInfo['dirname'], '/') . '/';
//dd($dirname);
$filename = $fileInfo['filename'];
list($width, $height, $imgType) = $srcType;
$im = null;
// 1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP
switch ($imgType) {
case 1:
$im = imagecreatefromgif($reaFile);
break;
case 2:
$im = imagecreatefromjpeg($reaFile);
break;
case 3:
$im = imagecreatefrompng($reaFile);
break;
}
// 重新取样P
$newWidth = $width * $percent;
$newHeight = $height * $percent;
$imageP = imagecreatetruecolor($newWidth, $newHeight);
imagecopyresampled($imageP, $im, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
$imageFunction = 'imagejpeg';
if ($dstExt != 'jpg') {
$imageFunction = 'image' . $dstExt;
}
$savePath = null;
if ($savePath) {
$imgInfo = $imageFunction($im, $savePath, $quality);
//return $savePath;
} else {
$savePath = public_path('upload/users/' . 'convert_' . $filename . '.' . $dstExt);
$imgInfo = $imageFunction($imageP, $savePath, $quality);
//return $savePath;
//$newFilecontent = file_get_contents($newDir);
}
imagedestroy($im);
return $savePath;
}
/**
* 同时支持本地及远程图片BASE64
*
* @param $file
* @return string|string[]
*/
public static function imageBase64($file)
{
if (empty($file) || !FileHelper::file_exists($file)) {
return '';
}
$fileName = FileHelper::get_file_name($file);
$newFile = $file;
if (FileHelper::isRemoteFile($file) && FileHelper::downloadUrlFile($file, FileHelper::getUploadFile('upload/tmp/' . $fileName))) {
$newFile = FileHelper::getUploadFile('upload/tmp/' . $fileName);
}
$content = file_get_contents($newFile);
$contentBase64 = base64_encode($content);
//$contentBase64 = str_replace("+", "%2B", $contentBase64);
return $contentBase64;
}
/**
* 将图片远程文件转成base64编码
*
* @param $file 远程图片
* @return string
*/
public static function fileToBase64($file)
{
// 取得图片的大小,类型等
$type = getimagesize($file);
$content = file_get_contents($file);
//base64编码
//$fileContent = base64_encode($content);
$fileContent = self::imageBase64($file);
$imgType = 'jeg';
switch ($type[2]) {//判读图片类型
case 1:
$imgType = "gif";
break;
case 2:
$imgType = "jpg";
break;
case 3:
$imgType = "png";
break;
}
//合成图片的base64编码
$img = 'data:image/' . $imgType . ';base64,' . $fileContent;
//$img = str_replace("+", "%2B", $img);
return $img;
}
/**
* 根据消息类型获取对应的消息类型图标
*
* @param int $type
* @return string
*/
public static function getPhoneMessageIcon(int $type)
{
switch ($type) {
case 1:
return ImageHelper::getImageUrl("/phone/ic_system_m@3x.png");
case 2:
return ImageHelper::getImageUrl("/phone/ic_shouru@3x.png");
case 3:
return ImageHelper::getImageUrl("/phone/ic_serve@3x.png");
case 4:
return ImageHelper::getImageUrl("/phone/ic_message_certificate@3x.png");
case 5:
return ImageHelper::getImageUrl("/phone/ic_message_certificate@3x.png");
case 6:
return ImageHelper::getImageUrl("/phone/ic_message_zb@3x.png");
case 7:
return ImageHelper::getImageUrl("/phone/ic_message_xy@3x.png");
case 8:
return ImageHelper::getImageUrl("/phone/ic_message_cwjs@3x.png");
case 9:
return ImageHelper::getImageUrl("/phone/ic_Smartphone@3x.png");
case 10:
return ImageHelper::getImageUrl("/phone/ic_message_signet@3x.png");
case 11:
return ImageHelper::getImageUrl("/phone/ic_message_zb@3x.png");
}
return ImageHelper::getImageUrl("/phone/ic_system_m@3x.png");
}
/**
* 判断远程图片是否存在
*
* @param $url
* @return bool
*/
public static function remote_image_exists($url)
{
$curl = curl_init($url);
// 不取回数据
curl_setopt($curl, CURLOPT_NOBODY, true);
// 发送请求
$result = curl_exec($curl);
$found = false;
// 如果请求没有发送失败
if ($result !== false) {
$info = curl_getinfo($curl);
if ($info["http_code"] == 200) {
$found = true;
}
}
return $found;
}
/**
* 简单的文件转存
*
* @param $url
* @param $locatPath
* @return bool
*/
public static function remoteToLocal($url, $locatPath)
{
if (self::remote_image_exists($url)) {
if (!file_exists(dirname($locatPath))) {
mkdir(dirname($locatPath), 0777, true);
}
file_put_contents($locatPath, file_get_contents($url));
}
return true;
}
/**
* 将历史大写改为小写存入库内
*
* @param string $str
* @return mixed
*/
public static function thumbnailUpperTolower(string $str)
{
return str_replace([
"image_url_Thumbnail",
"image_path_Thumbnail",
], [
"image_url_thumbnail",
"image_path_thumbnail",
], $str);
}
/**
* 获取缩略图
*
* @param array $json
* @return mixed
*/
public static function getImageThumbnail(array $json)
{
return $json["image_path_thumbnail"] ?? ($json["image_path_Thumbnail"] ?? ($json["image_path"] ?? ""));
}
/**
* 根据宽度生成压缩图片
*
* @param $sFile 压缩文件地址
* @param $width 指定图片格式化后的宽度
* @return bool|string
*/
public static function resizeImage($srcImage, $width, $newFileName)
{
$srcSize = getimagesize($srcImage);
$ename = explode('/', $srcSize['mime']);
if (count($ename) < 2) {
return $srcImage;
}
$ext = $ename[1];
if ($srcSize[0] <= $width) {
return $srcImage;
}
$height = ($width / $srcSize[0]) * $srcSize[1];
$tmpImage = imagecreatetruecolor($width, $height);
$type = substr(strrchr($srcImage, "."), 1);
$type = strtolower($type);
//初始化图象
if ($ext == "jpg" || $ext == "jpeg") {
$srcImageSource = imagecreatefromjpeg($srcImage);
}
if ($ext == "gif") {
$srcImageSource = imagecreatefromgif($srcImage);
}
if ($ext == "png") {
$srcImageSource = imagecreatefrompng($srcImage);
}
imagecopyresampled($tmpImage, $srcImageSource, 0, 0, 0, 0, $width, $height, $srcSize[0], $srcSize[1]);
if (imagejpeg($tmpImage, $newFileName)) {
return $newFileName;
}
return $srcImage;
}
}