Skip to content

Instantly share code, notes, and snippets.

@Jason-cqtan
Created November 7, 2019 07:03
Show Gist options
  • Save Jason-cqtan/dc631e02f2bd2431db21bab2e439b1fb to your computer and use it in GitHub Desktop.
Save Jason-cqtan/dc631e02f2bd2431db21bab2e439b1fb to your computer and use it in GitHub Desktop.
php图片base64编码解码
/**
* 图片编码
* @param string $img
* @param bool $imgHtmlCode
* @return string
*/
function imgBase64Encode($img = '', $imgHtmlCode = true)
{
//如果是本地文件
if(strpos($img,'http') === false && !file_exists($img)){
return $img;
}
//获取文件内容
$file_content = file_get_contents($img);
if($file_content === false){
return $img;
}
$imageInfo = getimagesize($img);
$prefiex = '';
if($imgHtmlCode){
$prefiex = 'data:' . $imageInfo['mime'] . ';base64,';
}
$base64 = $prefiex.chunk_split(base64_encode($file_content));
return $base64;
}
/**
* 图片解码
* @param string $base64_image_content base64编码字符串
* @param bool $onlyCode 是否只需要base64编码字符串(排除开头data,)
* @param bool $save_img 是否保存图片
* @param string $path 保存图片路径
* @return array|bool|false|string
*/
function imgBase64Decode($base64_image_content = '',$onlyCode=true, $save_img = false,$path='')
{
if (empty($base64_image_content)) {
return false;
}
//匹配出图片的信息
$match = preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result);
if (!$match) {
return false;
}
//解码图片内容(方法一)
$base64_image = preg_split("/(,|;)/",$base64_image_content);
if($onlyCode) {
return $base64_image[2];
}
$file_content = base64_decode($base64_image[2]);
$file_type = substr(strrchr($base64_image[0],'/'),1);
//解码图片内容(方法二)
//$base64_image = str_replace($result[1], '', $base64_image_content);
//$file_content = base64_decode($base64_image);
//$file_type = $result[2];
//如果不保存文件,直接返回图片内容
if (!$save_img) {
return $file_content;
}
//如果没指定目录,则保存在当前目录下
if (empty($path)) {
$path = __DIR__;
}
$file_path = $path . "/" . date('Ymd', time()) . "/";
if (!is_dir($file_path)) {
//检查是否有该文件夹,如果没有就创建
mkdir($file_path, 0777, true);
}
$file_name = time() . ".{$file_type}";
$new_file = $file_path . $file_name;
if (file_exists($new_file)) {
//有同名文件删除
@unlink($new_file);
}
if (file_put_contents($new_file, $file_content)) {
return $new_file;
}
return false;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment