如何使用PHP实现图片压缩后上传到七牛云存储并转换为Base64格式?

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格式,可以更方便地在网页中使用图片。

后端开发标签