PHP 之将网络图片base64编码与解码
一、效果图
二、编码
/** * 图片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; }
三、解码
/** * 片base64解码 * @param string $base64_image_content 图片文件流 * @param bool $save_img 是否保存图片 * @param string $path 文件保存路径 * @return bool|string */ function imgBase64Decode($base64_image_content = '', $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); $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; }