我想做图库项目,现在把登录后,图片下载的思路理顺下:
判断session后,有权限的可以下载图片,接下来很重要:
1,设置图片下载目录不可以被web直接访问,防止被盗
通过php读取然后丢给浏览器
2,原始图片下载过程中选择了分辨率的处理
涉及到在服务器端动态处理图片,改变其尺寸,然后再将其发送给用户。要在PHP中完成这个任务,你可以使用GD或ImageMagick这两个广泛使用的库。下面是一个使用GD库的示例:
- 安装和启用GD库: 首先,确保你的PHP安装包含了GD库。大多数现代PHP安装都已经包含了GD,但你可能需要在你的
php.ini
文件中启用它。 - 创建一个处理图片的PHP脚本:
<?php
session_start();
// 检查用户是否登录
if (!isset($_SESSION['user_id'])) {
die('You must be logged in to download files.');
}
// 指定原始图片的路径
$file_path = '/path/to/your/image.jpg';
// 检查文件是否存在
if (!file_exists($file_path)) {
die('File not found.');
}
// 设置图片的新分辨率
$new_width = 800;
$new_height = 600;
// 获取原始图片的尺寸和类型
list($original_width, $original_height, $image_type) = getimagesize($file_path);
// 根据图片类型创建新的图像
switch ($image_type) {
case IMAGETYPE_JPEG:
$original_image = imagecreatefromjpeg($file_path);
break;
case IMAGETYPE_PNG:
$original_image = imagecreatefrompng($file_path);
break;
case IMAGETYPE_GIF:
$original_image = imagecreatefromgif($file_path);
break;
default:
die('Unsupported image type');
}
// 创建一个新的图像资源,用来保存修改后的图片
$new_image = imagecreatetruecolor($new_width, $new_height);
// 复制并重置图片的尺寸
imagecopyresampled($new_image, $original_image, 0, 0, 0, 0, $new_width, $new_height, $original_width, $original_height);
// 设置响应头,以便浏览器识别内容类型
header('Content-Type: image/jpeg');
// 输出图片到浏览器
imagejpeg($new_image);
// 释放内存
imagedestroy($original_image);
imagedestroy($new_image);
?>
这样就可以实现不同的分辨率和防盗了。