<?php
function process_image($dir, $filename) {
// Set up the variables
$dir = $dir . DIRECTORY_SEPARATOR;
$i = strrpos($filename, '.');
$image_name = substr($filename, 0, $i);
$ext = substr($filename, $i);
// Set up the read path
$image_path = $dir . DIRECTORY_SEPARATOR . $filename;
// Set up the write paths
$image_path_400 = $dir . $image_name . '_400' . $ext;
$image_path_100 = $dir . $image_name . '_100' . $ext;
$image_path_250 = $dir . $image_name . '_250' . $ext;
// Create an image that's a maximum of 400x300 pixels
resize_image($image_path, $image_path_400, 400, 300);
// Create a thumbnail image that's a maximum of 100x100 pixels
resize_image($image_path, $image_path_100, 100, 100);
// Create an image that's a maximum of 250*250 pixels
resize_image($image_path, $image_path_250, 250, 250);
}
/***************
* Resize image
***************/
function resize_image($old_image_path, $new_image_path,
$max_width, $max_height) {
// Get image type
$image_info = getimagesize($old_image_path);
$image_type = $image_info[2];
// Set up the function names
switch($image_type) {
case IMAGETYPE_JPEG:
$image_from_file = 'imagecreatefromjpeg';
$image_to_file = 'imagejpeg';
break;
case IMAGETYPE_GIF:
$image_from_file = 'imagecreatefromgif';
$image_to_file = 'imagegif';
break;
case IMAGETYPE_PNG:
$image_from_file = 'imagecreatefrompng';
$image_to_file = 'imagepng';
break;
default:
echo 'File must be a JPEG, GIF, or PNG image.';
exit;
}
// Get the old image and its height and width
$old_image = $image_from_file($old_image_path);
$old_width = imagesx($old_image);
$old_height = imagesy($old_image);
// Calculate height and width ratios
$width_ratio = $old_width / $max_width;
$height_ratio = $old_height / $max_height;
// If image is larger than specified ratio, create the new image
if ($width_ratio > 1 || $height_ratio > 1) {
// Calculate height and width for the new image
$ratio = max($width_ratio, $height_ratio);
$new_height = round($old_height / $ratio);
$new_width = round($old_width / $ratio);
// Create the new image
$new_image = imagecreatetruecolor($new_width, $new_height);
// Set transparency according to image type
if ($image_type == IMAGETYPE_GIF) {
$alpha = imagecolorallocatealpha($new_image, 0, 0, 0, 127);
imagecolortransparent($new_image, $alpha);
}
if ($image_type == IMAGETYPE_PNG || $image_type == IMAGETYPE_GIF) {
imagealphablending($new_image, false);
imagesavealpha($new_image, true);
}
// Copy old image to new image - this resizes the image
$new_x = 0;
$new_y = 0;
$old_x = 0;
$old_y = 0;
imagecopyresampled($new_image, $old_image,
$new_x, $new_y,
$old_x, $old_y,
$new_width, $new_height,
$old_width, $old_height);
// Write the new image to a new file
$image_to_file($new_image, $new_image_path);
// Free any memory associated with the new image
imagedestroy($new_image);
} else {
// Write the old image to a new file
$image_to_file($old_image, $new_image_path);
}
// Free any memory associated with the old image
imagedestroy($old_image);
}
?>
<?php
require_once 'file_util.php'; // the get_file_list function
require_once 'image_util.php'; // the process_image function
$image_dir = 'images';
$image_dir_path = getcwd() . DIRECTORY_SEPARATOR . $image_dir;
$action = filter_input(INPUT_POST, 'action');
if ($action == NULL) {
$action = filter_input(INPUT_GET, 'action');
if ($action == NULL) {
$action = '';
}
}
function uploadFiles($name) {
global $image_dir_path;
if (isset($_FILES[$name])) {
$filename = $_FILES[$name]['name'];
if (!empty($filename)) {
$source = $_FILES[$name]['tmp_name'];
$target = $image_dir_path . DIRECTORY_SEPARATOR . $filename;
move_uploaded_file($source, $target);
// create the '400', '250', and '100' versions of the image
process_image($image_dir_path, $filename);
}
}
}
switch ($action) {
case 'upload':
uploadFiles('file1');
uploadFiles('file2');
uploadFiles('file3');
break;
case 'delete':
$filename = filter_input(INPUT_GET, 'filename',
FILTER_SANITIZE_STRING);
$target = $image_dir_path . DIRECTORY_SEPARATOR . $filename;
if (file_exists($target)) {
unlink($target);
}
break;
}
$files = get_file_list($image_dir_path);
include('uploadform.php');
?>