一、接收图片
1.1 使用$_FILES数组
在HTML表单中使用enctype="multipart/form-data"属性,可以上传文件。PHP通过$_FILES全局数组接收上传的文件信息。
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$uploadErrors = array(
UPLOAD_ERR_OK => 'No errors.',
UPLOAD_ERR_INI_SIZE => 'Larger than upload_max_filesize.',
UPLOAD_ERR_FORM_SIZE => 'Larger than form_max_filesize.',
UPLOAD_ERR_PARTIAL => 'Partial upload.',
UPLOAD_ERR_NO_FILE => 'No file uploaded.',
UPLOAD_ERR_NO_TMP_DIR => 'No temporary directory.',
UPLOAD_ERR_CANT_WRITE => 'Can\'t write to disk.',
UPLOAD_ERR_EXTENSION => 'File upload stopped by extension.'
);
if (isset($_FILES['userfile']) && $_FILES['userfile']['error'] == UPLOAD_ERR_OK) {
$tmp_name = $_FILES['userfile']['tmp_name'];
$name = $_FILES['userfile']['name'];
$size = $_FILES['userfile']['size'];
$error = $_FILES['userfile']['error'];
// 移动上传的文件到指定目录
$target_path = "uploads/" . basename($name);
if (move_uploaded_file($tmp_name, $target_path)) {
echo "The file ". htmlspecialchars( $name ). " has been uploaded";
} else {
echo "Possible file upload error.\n";
}
} else {
echo $uploadErrors[$error];
}
}
?>
1.2 使用php://input
对于非表单数据上传,如通过URL上传文件,可以使用php://input来读取原始POST数据。
<?php
// 获取上传的文件内容
$rawData = file_get_contents('php://input');
// 对内容进行处理
// ...
?>
二、处理图片
2.1 使用GD库
<?php
// 加载图片
$image = imagecreatefromjpeg('image.jpg');
// 获取图片宽高
$width = imagesx($image);
$height = imagesy($image);
// 创建新图片
$newImage = imagecreatetruecolor($width, $height);
// 转换图片颜色
imagecopyresampled($newImage, $image, 0, 0, 0, 0, $width, $height, $width, $height);
// 输出图片
header('Content-Type: image/jpeg');
imagejpeg($newImage);
// 释放资源
imagedestroy($image);
imagedestroy($newImage);
?>
2.2 使用第三方库
<?php
// 引入Imagick库
require_once 'imagick.php';
$imagick = new Imagick('image.jpg');
$imagick->resizeimage(200, 200, Imagick::FILTER_LANCZOS, 1);
$imagick->writeimage('new_image.jpg');
$imagick->clear();
$imagick->destroy();
?>
2.3 使用在线服务
<?php
// 引入七牛云SDK
require 'vendor/autoload.php';
use Qiniu\Auth;
use Qiniu\Processing\Operation;
$accessKey = 'your_access_key';
$secretKey = 'your_secret_key';
$bucket = 'your_bucket_name';
// 初始化鉴权
$auth = new Auth($accessKey, $secretKey);
// 生成上传凭证
$uploadToken = $auth->uploadToken($bucket);
// 创建操作对象
$operation = new Operation(new Image(), null);
// 设置图片处理参数
$operation->setTransform(Imagick::FILTER_LANCZOS, 200, 200);
// 生成图片处理链接
$manager = new Qiniu\Processing\Manager($auth);
$manager->execute($bucket, 'new_image.jpg', $uploadToken, $operation);
?>