-
Notifications
You must be signed in to change notification settings - Fork 5
/
ImageCropper.php
132 lines (103 loc) · 3.9 KB
/
ImageCropper.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<?php
/*
Single Image Example:
php ImageCropper.php some_input_directory_path some_output_directory_path 137 105 878 549 imagename.png
Crop All Images in Folder Example:
php ImageCropper.php some_input_directory_path some_input_directory_path\cropped 0 0 255 255
*/
// https://www.php.net/manual/en/reserved.variables.argv.php
if(empty($argv)){
$message = 'Missing Command Line Args:' . PHP_EOL;
$message .= 'TO CROP AN ENTIRE FOLDER - USE: ' . $argv[0] . ' INPUT_DIR OUTPUT_DIR X Y WIDTH HEIGHT' . PHP_EOL;
$message .= 'TO CROP A SINGLE IMAGE - USE: ' . $argv[0] . ' INPUT_DIR OUTPUT_DIR X Y WIDTH HEIGHT IMAGE_NAME' . PHP_EOL;
die($message);
}
/////////////////////////////////
// Get Args as Named Variables //
/////////////////////////////////
$in_directory = rtrim($argv[1], " \\/\n\r\t\v\x00");
$out_directory = rtrim($argv[2], " \\/\n\r\t\v\x00");
$x = $argv[3];
$y = $argv[4];
$width = $argv[5];
$height = $argv[6];
$file = '';
if(isset($argv[7])){
$file = $argv[7];
}
/////////////////////////////////
// Error Checking & Correcting //
/////////////////////////////////
if(!is_dir($in_directory)){ // INPUT_DIR (arg 1) is not a directory
$message = 'INPUT_DIR invalid: ' . $in_directory . ' is not a valid folder' . PHP_EOL;
die($message);
}
is_dir($out_directory) || mkdir($out_directory); // Quietly make the OUTPUT_DIR if it doesn't already exist
// Make sure the size variables are numbers
if(!is_numeric($x)){
$x = 0;
}
if(!is_numeric($y)){
$y = 0;
}
if(!is_numeric($width)){
$width = 0;
}
if(!is_numeric($height)){
$height = 0;
}
/////////////////////////
// Collect Image Paths //
/////////////////////////
$supported_file_types = array('jpg', 'jpeg', 'png');
$images = array();
if($file != ''){ // arg 7 (IMAGE_NAME) is not empty
if(!is_dir($in_directory . DIRECTORY_SEPARATOR . $file) ){ // and is not a directory
// Is the file type unsupported
if(!in_array(strtolower(pathinfo($in_directory . DIRECTORY_SEPARATOR . $file)['extension']), $supported_file_types)){
$message = 'Unsupported File Format: ' . $image_extension . PHP_EOL;
$message .= 'SUPPORTED FILE FORMATS: jpg, jpeg, png' . PHP_EOL;
die($message);
}
$images = array($in_directory . DIRECTORY_SEPARATOR . $file); // Single image
}
else{
$message = 'Arg 7 (IMAGE_NAME) is a folder not an image: ' . $file . PHP_EOL;
die($message);
}
}
else{ // No file (arg 7) provided
$images = glob($in_directory . DIRECTORY_SEPARATOR . "*.{jpg,jpeg,png}", GLOB_BRACE); // Is folder
}
////////////////////////////
// GO GO CROPPING POWERS! //
////////////////////////////
if(count($images) > 0){
foreach($images as $image){ // For all the image paths
// Obtain File Extension
$image_extension = strtolower(pathinfo($image)['extension']);
// Load Image
if($image_extension == 'jpg' || $image_extension == 'jpeg'){
$img = imagecreatefromjpeg($image);
}
elseif($image_extension == 'png'){
$img = imagecreatefrompng($image);
}
// Crop Image
if($width == 0){ // Crop size was invalid
$width = imagesx($img); // Select entire image width to be non-destructive
}
if($height == 0){// Crop size was invalid
$height = imagesy($img); // Select entire image height to be non-destructive
}
$img = imagecrop($img, array('x' => $x, 'y' => $y, 'width' => $width, 'height' => $height));
// Save Image
$save_path = $out_directory . DIRECTORY_SEPARATOR . pathinfo($image)['filename'] . ".cropped.$image_extension";
if($image_extension == 'jpg' || 'jpeg'){
imagejpeg($img, $save_path);
}
elseif($image_extension == 'png'){
imagepng($img, $save_path);
}
}
}