1. 前言
在现代互联网时代,为了更好的用户体验,我们通常需要对图片进行压缩处理,减小图片大小,提升网站性能,提高用户浏览速度。同时,为了提高图片的安全性,在上传图片到云存储服务器时,通常需要对图片进行加密转换处理,以防止图片在传输过程中被篡改。本文将介绍如何使用PHP实现图片压缩后上传到七牛云存储,并将其转换为Base64格式,以供更好的安全存储。
2. 压缩图片
2.1 安装GD库
在PHP中实现图片压缩功能需要使用GD库,首先需要确保服务器上已经安装了GD库。可以通过phpinfo()函数查看服务器环境信息,找到“GD Support”来判断是否安装了GD库。如果没有安装,可以通过以下命令安装:
sudo apt-get update
sudo apt-get install php-gd
2.2 压缩图片
在本文中,我们使用PHP中的GD库来实现图片的压缩功能。下面是一个简单的PHP函数,可以对传入的图片进行压缩处理。
/**
* 对图片进行压缩
* @param string $sourcePath 原图片路径
* @param string $compressPath 压缩后图片保存路径
* @param int $compressPercent 压缩百分比
* @return bool
*/
function compressImage($sourcePath, $compressPath, $compressPercent = 30)
{
$image = null;
$imageInfo = getimagesize($sourcePath);
$imageType = $imageInfo[2];
switch ($imageType) {
case IMAGETYPE_JPEG:
$image = imagecreatefromjpeg($sourcePath);
break;
case IMAGETYPE_PNG:
$image = imagecreatefrompng($sourcePath);
break;
default:
return false;
}
$width = imagesx($image);
$height = imagesy($image);
$newWidth = $width * $compressPercent / 100;
$newHeight = $height * $compressPercent / 100;
$newImage = imagecreatetruecolor($newWidth, $newHeight);
imagecopyresampled($newImage, $image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
imagejpeg($newImage, $compressPath);
imagedestroy($image);
imagedestroy($newImage);
return true;
}
函数中使用了getimagesize()函数获取原图片的基本信息,然后根据图片类型分别使用imagecreatefromjpeg()和imagecreatefrompng()函数创建GD图片资源,使用imagecopyresampled()函数重新采样后,再使用imagejpeg()函数将压缩后的图片保存到指定路径。
3. 上传至七牛云存储
3.1 注册七牛云账号
在上传图片之前,我们需要注册一个七牛云账号,并创建一个可用的存储空间。注册七牛云账号可参考 七牛云官网。
3.2 安装七牛云SDK
在PHP中与七牛云存储进行交互需要使用七牛云SDK,可参考 七牛云SDK官方文档 进行安装。
3.3 上传图片
上传图片需要调用七牛云SDK中的API进行上传,需要先进行SDK的初始化,并创建一个UploadManager对象。
use Qiniu\Auth;
use Qiniu\Storage\UploadManager;
use Qiniu\Storage\BucketManager;
$accessKey = '七牛云AccessKey';
$secretKey = '七牛云SecretKey';
$auth = new Auth($accessKey, $secretKey);
$bucket = '七牛云存储空间名称';
$uploadMgr = new UploadManager();
$filePath = '/path/to/compressed/image.jpg';
$key = '上传后图片名称.jpg';
list($ret, $err) = $uploadMgr->putFile($auth->uploadToken($bucket), $key, $filePath);
if ($err !== null) {
return false;
} else {
return true;
}
在上面的代码中,我们首先实例化了一个Auth对象,并传入了AccessKey和SecretKey。然后使用Auth对象的uploadToken()函数生成可用的上传Token,作为参数传给UploadManager对象的put方法。put方法接受3个参数分别为上传Token、上传后的文件名和上传文件本地路径,上传成功后返回JSON格式的文件信息。
4. 转换为Base64格式
4.1 使用七牛云SDK下载图片
在将图片转换为Base64格式之前,需要先将图片从七牛云存储下载下来,可以使用七牛云SDK的BucketManager对象的fetch方法将七牛云存储上的图片下载到本地:
use Qiniu\Storage\BucketManager;
$accessKey = '七牛云AccessKey';
$secretKey = '七牛云SecretKey';
$bucket = '七牛云存储空间名称';
$key = '上传后图片名称.jpg';
$filePath = '/path/to/downloaded/image.jpg';
$auth = new Auth($accessKey, $secretKey);
$config = new \Qiniu\Config();
$bucketMgr = new BucketManager($auth, $config);
list($ret, $err) = $bucketMgr->fetch($url, $bucket, $key);
if ($err !== null) {
return false;
} else {
return true;
}
在上面的代码中,我们首先实例化了一个BucketManager对象,然后使用fetch方法将七牛云存储上的图片下载到本地
4.2 将图片转换为Base64格式
在下载下来图片后,可以使用PHP内置的base64_encode()函数将图片内容转换为Base64格式
$imageContent = file_get_contents('/path/to/downloaded/image.jpg');
$base64Image = base64_encode($imageContent);
echo $base64Image;
在上面的代码中,使用了file_get_contents()函数读取本地磁盘上的图片内容,并使用base64_encode()函数将图片内容转换为Base64格式。
5. 总结
在本文中,我们详细介绍了如何使用PHP实现图片压缩后上传到七牛云存储,并将其转换为Base64格式。通过对图片进行压缩处理,可以提高网站性能和用户体验。通过上传至云存储,可以提高图片的安全性和可靠性。最后,通过将图片转换为Base64格式,可以更方便地在网页中使用图片。