This repository has been archived by the owner on Jun 23, 2023. It is now read-only.
/
resize.php
130 lines (111 loc) · 3.65 KB
/
resize.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
#!/usr/bin/php
<?php
/**
* PEL: PHP Exif Library.
* A library with support for reading and
* writing all Exif headers in JPEG and TIFF images using PHP.
*
* Copyright (C) 2006, 2007 Martin Geisler.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program in the file COPYING; if not, write to the
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301 USA
*/
/* a printf() variant that appends a newline to the output. */
function println($args)
{
$args = func_get_args();
$fmt = array_shift($args);
vprintf($fmt . "\n", $args);
}
/* Make PEL speak the users language, if it is available. */
setlocale(LC_ALL, '');
/* Load the required PEL files for handling JPEG images. */
require_once '../autoload.php';
use lsolesen\pel\PelJpeg;
/*
* Store the name of the script in $prog and remove this first part of
* the command line.
*/
$prog = array_shift($argv);
$error = false;
/*
* The next argument could be -d to signal debug mode where lots of
* extra information is printed out when the image is parsed.
*/
if (isset($argv[0]) && $argv[0] == '-d') {
Pel::setDebug(true);
array_shift($argv);
}
/* The mandatory input filename. */
if (isset($argv[0])) {
$input = array_shift($argv);
} else {
$error = true;
}
/* The mandatory output filename. */
if (isset($argv[0])) {
$output = array_shift($argv);
} else {
$error = true;
}
/* The mandatory scale factor. */
if (isset($argv[0])) {
$scale = array_shift($argv);
} else {
$error = true;
}
/*
* Usage information is printed if an error was found in the command
* line arguments.
*/
if ($error) {
println('Usage: %s [-d] <input> <output> <scale>', $prog);
println('Optional arguments:');
println(' -d turn debug output on.');
println('Mandatory arguments:');
println(' input the input filename, a JPEG image.');
println(' output filename for saving the changed image.');
println(' scale scale factor, say 0.5 to resize to half the ' . 'original size.');
exit(1);
}
/* The input file is now loaded into a PelJpeg object. */
println('Reading file "%s".', $input);
$input_jpeg = new PelJpeg($input);
/*
* The input image is already loaded, so we can reuse the bytes stored
* in $input_jpeg when creating the Image resource.
*/
$original = ImageCreateFromString($input_jpeg->getBytes());
$original_w = ImagesX($original);
$original_h = ImagesY($original);
$scaled_w = $original_w * $scale;
$scaled_h = $original_h * $scale;
/* Now create the scaled image. */
$scaled = ImageCreateTrueColor($scaled_w, $scaled_h);
ImageCopyResampled($scaled, $original, 0, 0, 0, 0, $scaled_w, $scaled_h, $original_w, $original_h);
/*
* We want the raw JPEG data from $scaled. Luckily, one can create a
* PelJpeg object from an image resource directly:
*/
$output_jpeg = new PelJpeg($scaled);
/* Retrieve the original Exif data in $jpeg (if any). */
$exif = $input_jpeg->getExif();
/* If no Exif data was present, then $exif is null. */
if ($exif != null) {
$output_jpeg->setExif($exif);
}
/* We can now save the scaled image. */
println('Writing file "%s".', $output);
$output_jpeg->saveFile($output);