在PHP中上传图像:如果需要,如何将图像转换为JPEG


Upload image in PHP: how to convert the image to JPEG if needed?

我正在使用以下PHP上传脚本上传图像并将其存储到目录中。

我现在希望脚本识别上传图像的类型,如果不image/jpeg,则脚本会在存储之前自动将图像转换为 JPEG 格式。

有人可以告诉我如何实现这一目标吗?

<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$title = 'Profile_Pic';
include '../include/config.php';
/**
 * uploadFile()
 * 
 * @param string $file_field name of file upload field in html form
 * @param bool $check_image check if uploaded file is a valid image
 * @param bool $random_name generate random filename for uploaded file
 * @return array
 */
function uploadFile ($file_field = null, $check_image = false, $random_name = false) {
  //Config Section    
  //Set file upload path
  $path = '../data/user/image/'.$_SESSION['id'].'/'; //with trailing slash
  //Set max file size in bytes
  $max_size = 1000000;
  //Set default file extension whitelist
  $whitelist_ext = array('jpg','png','gif');
  //Set default file type whitelist
  $whitelist_type = array('image/jpeg', 'image/png','image/gif');
  //The Validation
  // Create an array to hold any output
  $out = array('error'=>null);
  if (!$file_field) {
    $out['error'][] = "Please specify a valid form field name";           
  }
  if (!$path) {
    $out['error'][] = "Please specify a valid upload path";               
  }
  if (count($out['error'])>0) {
    return $out;
  }
  //Make sure that there is a file
  if((!empty($_FILES[$file_field])) && ($_FILES[$file_field]['error'] == 0)) {
    // Get filename
    $file_info = pathinfo($_FILES[$file_field]['name']);
    $name = $file_info['filename'];
    $ext = $file_info['extension'];
    //Check file has the right extension           
    if (!in_array($ext, $whitelist_ext)) {
      $out['error'][] = "Invalid file Extension";
    }
    //Check that the file is of the right type
    if (!in_array($_FILES[$file_field]["type"], $whitelist_type)) {
      $out['error'][] = "Invalid file Type";
    }
    //Check that the file is not too big
    if ($_FILES[$file_field]["size"] > $max_size) {
      $out['error'][] = "File is too big";
    }
    //If $check image is set as true
    if ($check_image) {
      if (!getimagesize($_FILES[$file_field]['tmp_name'])) {
        $out['error'][] = "Uploaded file is not a valid image";
      }
    }
    //Create full filename including path
    if ($random_name) {
      // Generate random filename
      $tmp = 'default';
      if (!$tmp || $tmp == '') {
        $out['error'][] = "File must have a name";
      }     
      $newname = $tmp.'.'.$ext;                                
    } else {
        $newname = $name.'.'.$ext;
    }
    //Check if file already exists on server
    if (file_exists($path.$newname)) {
      $out['error'][] = "A file with this name already exists";
    }
    if (count($out['error'])>0) {
      //The file has not correctly validated
      return $out;
    } 
    if (move_uploaded_file($_FILES[$file_field]['tmp_name'], $path.$newname)) {
      //Success
      $out['filepath'] = $path;
      $out['filename'] = $newname;
      return $out;
    } else {
      $out['error'][] = "Server Error!";
    }
  } else {
    $out['error'][] = "No file uploaded";
    return $out;
  }      
} }
?>

把它放在move_uploaded_file之前。

//non JPG, convert to JPG
if($_FILES[$file_field]['type'] != 'image/jpeg') {
   // create image resource
   $img = imagecreatefromjpeg($_FILES[$file_field]['tmp_name']);
   // store to directory
   imagejpeg($img, $path.$newname, $quality); // quality is between 0 (worst) to 100 (best), but this is not mandatory, you can skip quality parameter
   // free memory associated with image resource
   imagedestroy($img);
   // success, return filepath and name
   $out['filepath'] = $path;
   $out['filename'] = $newname;
   return $out;
}