forked from evanhunter/PJMT
-
Notifications
You must be signed in to change notification settings - Fork 0
/
get_ps_thumb.php
177 lines (150 loc) · 6.87 KB
/
get_ps_thumb.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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
<?php
/******************************************************************************
*
* Filename: get_ps_thumb.php
*
* Description: This script extracts a Photoshop IRB (Image Resource Block)
* thumbnail from within a JPEG file and allows it to be displayed
*
* Usage: get_ps_thumb?filename=<filename>
*
* Author: Evan Hunter
*
* Date: 23/7/2004
*
* Project: PHP JPEG Metadata Toolkit
*
* Revision: 1.12
*
* 1.00 -> 1.11 : Added support for Photoshop IRB thumbnails which are
* embedded within EXIF information (used in TIFF files)
* 1.11 -> 1.12 : changed to use _GET variable
*
* URL: http://electronics.ozhiker.com
*
* Copyright: Copyright Evan Hunter 2004
*
* License: This file is part of the PHP JPEG Metadata Toolkit.
*
* The PHP JPEG Metadata Toolkit 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.
*
* The PHP JPEG Metadata Toolkit 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 the PHP JPEG Metadata Toolkit; if not,
* write to the Free Software Foundation, Inc., 59 Temple
* Place, Suite 330, Boston, MA 02111-1307 USA
*
* If you require a different license for commercial or other
* purposes, please contact the author: [email protected]
*
******************************************************************************/
// Ensure that nothing can write to the standard io, before we get the header out
ob_start( );
// retrieve the filename from the URL parameters
$filename = $_GET['filename'];
// Change: Check for file extension rather than assuming JPEG as of 1.11
// Retrieve the Filename Extension
$path_parts = pathinfo( $filename );
// Check if the Extension is JPEG
if ( ( strcasecmp( $path_parts["extension"], "jpg" ) == 0 ) ||
( strcasecmp( $path_parts["extension"], "jpeg" ) == 0 ) )
{
// JPEG Extension
include 'JPEG.php';
include 'Photoshop_IRB.php';
// Retrieve the JPEG header Data
$jpeg_header_data = get_jpeg_header_data( $filename );
// Retrieve any Photoshop IRB data in the file
$IRB_array = get_Photoshop_IRB( $jpeg_header_data );
// Check if Photoshop IRB data was retrieved
if ( $IRB_array === FALSE )
{
// No Photoshop IRB data could be retrieved - abort
ob_end_clean ( );
echo "<p>Photoshop IRB could not be retrieved from the JPEG file</p>\n";
return;
}
// Cycle through the resources in the Photoshop IRB
// Until either a thumbnail resource is found or
// there are no more resources
$i = 0;
while ( ( $i < count( $IRB_array ) ) &&
( $IRB_array[$i]['ResID'] != 0x0409 ) &&
( $IRB_array[$i]['ResID'] != 0x040C ) )
{
$i++;
}
// Check if a thumbnail was found
if ( $i < count( $IRB_array ) )
{
// A thumbnail was found, Display it
ob_end_clean ( );
header("Content-type: image/jpeg");
print substr( $IRB_array[$i]['ResData'] , 28 );
}
}
// Change: Add support for TIFF Photoshop IRB thumbnails as of 1.11
// Check if file has TIFF extension
else if ( ( strcasecmp( $path_parts["extension"], "tif" ) == 0 ) ||
( strcasecmp( $path_parts["extension"], "tiff" ) == 0 ) )
{
// TIFF Extension
include 'EXIF.php';
// Retrieve the EXIF info
$exif_array = get_EXIF_TIFF( $filename );
// Retrieve any Photoshop IRB data in the EXIF
if ( ( array_key_exists( 0, $exif_array ) ) &&
( array_key_exists( 34377, $exif_array[0] ) ) &&
( array_key_exists( 'Data', $exif_array[0][34377] ) ) )
{
$IRB_array = $exif_array[0][34377]['Data'];
// Check if Photoshop IRB data was retrieved
if ( $IRB_array === FALSE )
{
// No Photoshop IRB data could be retrieved - abort
ob_end_clean ( );
echo "<p>Photoshop IRB could not be retrieved from the TIFF file</p>\n";
return;
}
// Cycle through the resources in the Photoshop IRB
// Until either a thumbnail resource is found or
// there are no more resources
$i = 0;
while ( ( $i < count( $IRB_array ) ) &&
( $IRB_array[$i]['ResID'] != 0x0409 ) &&
( $IRB_array[$i]['ResID'] != 0x040C ) )
{
$i++;
}
// Check if a thumbnail was found
if ( $i < count( $IRB_array ) )
{
// A thumbnail was found, Display it
ob_end_clean ( );
header("Content-type: image/jpeg");
print substr( $IRB_array[$i]['ResData'] , 28 );
}
}
else
{
// Embedded Photoshop IRB block not found
ob_end_clean ( );
echo "No Photoshop IRB found within EXIF";
}
}
else
{
// Unknown extension
ob_end_clean ( );
echo "Unknown file Type";
}
?>