图片上传

1. 文件上传表单

<form action="upload.php" method="post" enctype="multipart/form-data">
  <input type="file" name="image" />
  <input type="submit" value="上传" />
</form>

2. PHP处理上传

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['image'])) {
  $image = $_FILES['image'];
  $upload_dir = 'uploads/';
  $upload_path = $upload_dir . basename($image['name']);

  if (move_uploaded_file($image['tmp_name'], $upload_path)) {
    echo "文件上传成功!";
  } else {
    echo "文件上传失败!";
  }
}
?>

3. 验证文件类型

if (getimagesize($image['tmp_name']) === false) {
  die("文件不是一个有效的图片!");
}

图片压缩

1. 使用ImageMagick

安装

在Linux系统中,可以使用以下命令安装:

sudo apt-get install imagemagick

PHP扩展

在PHP中,可以使用Imagick扩展来调用ImageMagick。

<?php
$image = new Imagick($upload_path);
$image->setImageCompression(Imagick::COMPRESSION_JPEG);
$image->setImageCompressionQuality(75);
$image->resizeImage(800, null, Imagick::FILTER_LANCZOS, 1);
$image->writeImage($upload_path);
$image->clear();
$image->destroy();
?>

2. 使用GD库

<?php
$image = imagecreatefromjpeg($upload_path);
$width = imagesx($image);
$height = imagesy($image);
$resize_width = 800;
$resize_height = ($height * $resize_width) / $width;
$image_resized = imagecreatetruecolor($resize_width, $resize_height);
imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $resize_width, $resize_height, $width, $height);
imagejpeg($image_resized, $upload_path);
imagedestroy($image);
imagedestroy($image_resized);
?>

3. 智能压缩

<?php
$original_size = filesize($upload_path);
$desired_size = 500000; // 500KB

if ($original_size > $desired_size) {
  // 压缩图片
  // ...
}
?>

总结