- Impact
- 0
Hi there,
I have this script:
and this script
And I need to run them together. One thumbnails an image using height=xx and width=xx from the URL and the other watermarks it with a PNG.
Does anybody know how I can combine them? I'm not good with PHP at all so I'm sure it's simple, but just sticking them together doesn't work! I either get the thumbnail failing or the watermarking failing.
Cheers,
Rich
I have this script:
PHP:
<?php
//////////////////////////////////////////////////////////////
/// phpThumb() by James Heinrich <[email protected]> //
// available at [url]http://phpthumb.sourceforge.net[/url] ///
//////////////////////////////////////////////////////////////
/// //
// See: phpthumb.changelog.txt for recent changes //
// See: phpthumb.readme.txt for usage instructions //
// ///
//////////////////////////////////////////////////////////////
error_reporting(E_ALL);
ini_set('display_errors', '1');
if (!@ini_get('safe_mode')) {
set_time_limit(60); // shouldn't take nearly this long in most cases, but with many filter and/or a slow server...
}
// this script relies on the superglobal arrays, fake it here for old PHP versions
if (phpversion() < '4.1.0') {
$_SERVER = $HTTP_SERVER_VARS;
$_GET = $HTTP_GET_VARS;
}
if (file_exists('phpThumb.config.php')) {
ob_start();
if (include_once(dirname(__FILE__).'/phpThumb.config.php')) {
// great
} else {
ob_end_flush();
die('failed to include_once('.dirname(__FILE__).'/phpThumb.config.php) - realpath="'.realpath(dirname(__FILE__).'/phpThumb.config.php').'"');
}
ob_end_clean();
} elseif (file_exists('phpThumb.config.php.default')) {
die('Please rename "phpThumb.config.php.default" to "phpThumb.config.php"');
} else {
die('failed to include_once('.dirname(__FILE__).'/phpThumb.config.php) - realpath="'.realpath(dirname(__FILE__).'/phpThumb.config.php').'"');
}
if (!@$_SERVER['QUERY_STRING']) {
die('$_SERVER[QUERY_STRING] is empty');
}
if (@$PHPTHUMB_CONFIG['high_security_enabled']) {
if (!@$_GET['hash']) {
die('ERROR: missing hash');
}
if (strlen($PHPTHUMB_CONFIG['high_security_password']) < 5) {
die('ERROR: strlen($PHPTHUMB_CONFIG[high_security_password]) < 5');
}
if ($_GET['hash'] != md5(str_replace('&hash='.$_GET['hash'], '', $_SERVER['QUERY_STRING']).$PHPTHUMB_CONFIG['high_security_password'])) {
die('ERROR: invalid hash');
}
}
if (!function_exists('ImageJPEG') && !function_exists('ImagePNG') && !function_exists('ImageGIF')) {
// base64-encoded error image in GIF format
$ERROR_NOGD = 'R0lGODlhIAAgALMAAAAAABQUFCQkJDY2NkZGRldXV2ZmZnJycoaGhpSUlKWlpbe3t8XFxdXV1eTk5 P7+/iwAAAAAIAAgAAAE/vDJSau9WILtTAACUinDNijZtAHfCojS4W5H+qxD8xibIDE9h0OwWaRWDIljJSkUJYsN4bihMB8th3I ToAKs1VtYM75cyV8sZ8vygtOE5yMKmGbO4jRdICQCjHdlZzwzNW4qZSQmKDaNjhUMBX4BBAlmMywFS RWEmAI6b5gAlhNxokGhooAIK5o/pi9vEw4Lfj4OLTAUpj6IabMtCwlSFw0DCKBoFqwAB04AjI54PyZ+yY3TD0ss2YcVmN/gvpcu4TOyFivWqYJlbAHPpOntvxNAACcmGHjZzAZqzSzcq5fNjxFmAFw9iFRunD1epU6tsIPmFCAJn WYE0FURk7wJDA0MTKpEzoWAAskiAAA7';
header('Content-Type: image/gif');
echo base64_decode($ERROR_NOGD);
exit;
}
// returned the fixed string if the evil "magic_quotes_gpc" setting is on
if (get_magic_quotes_gpc()) {
$RequestVarsToStripSlashes = array('src', 'wmf', 'file', 'err', 'goto', 'down');
foreach ($RequestVarsToStripSlashes as $key) {
if (isset($_GET[$key])) {
$_GET[$key] = stripslashes($_GET[$key]);
}
}
}
// instantiate a new phpThumb() object
ob_start();
if (!include_once(dirname(__FILE__).'/phpthumb.class.php')) {
ob_end_flush();
die('failed to include_once("'.realpath(dirname(__FILE__).'/phpthumb.class.php').'")');
}
ob_end_clean();
$phpThumb = new phpThumb();
if (@$_GET['src'] && isset($_GET['md5s']) && empty($_GET['md5s'])) {
if (eregi('^(f|ht)tp[s]?://', $_GET['src'])) {
if ($fp_source = @fopen($_GET['src'], 'rb')) {
$filedata = '';
while (true) {
$buffer = fread($fp_source, 16384);
if (strlen($buffer) == 0) {
break;
}
$filedata .= $buffer;
}
fclose($fp_source);
$md5s = md5($filedata);
}
} else {
$SourceFilename = $phpThumb->ResolveFilenameToAbsolute($_GET['src']);
if (is_readable($SourceFilename)) {
$md5s = phpthumb_functions::md5_file_safe($SourceFilename);
} else {
$phpThumb->ErrorImage('ERROR: "'.$SourceFilename.'" cannot be read');
}
}
if (@$_SERVER['HTTP_REFERER']) {
$phpThumb->ErrorImage('&md5s='.$md5s);
} else {
die('&md5s='.$md5s);
}
}
foreach ($PHPTHUMB_CONFIG as $key => $value) {
$keyname = 'config_'.$key;
$phpThumb->$keyname = $value;
}
////////////////////////////////////////////////////////////////
// Debug output, to try and help me diagnose problems
if (@$_GET['phpThumbDebug'] == '1') {
$phpThumb->phpThumbDebug();
}
////////////////////////////////////////////////////////////////
$parsed_url_referer = parse_url(@$_SERVER['HTTP_REFERER']);
if ($phpThumb->config_nooffsitelink_require_refer && !in_array(@$parsed_url_referer['host'], $phpThumb->config_nohotlink_valid_domains)) {
$phpThumb->ErrorImage('config_nooffsitelink_require_refer enabled and '.(@$parsed_url_referer['host'] ? '"'.$parsed_url_referer['host'].'" is not an allowed referer' : 'no HTTP_REFERER exists'));
}
$parsed_url_src = parse_url(@$_GET['src']);
if ($phpThumb->config_nohotlink_enabled && $phpThumb->config_nohotlink_erase_image && eregi('^(f|ht)tp[s]?://', @$_GET['src']) && !in_array(@$parsed_url_src['host'], $phpThumb->config_nohotlink_valid_domains)) {
$phpThumb->ErrorImage($phpThumb->config_nohotlink_text_message);
}
////////////////////////////////////////////////////////////////
// You may want to pull data from a database rather than a physical file
// If so, uncomment the following $SQLquery line (modified to suit your database)
// Note: this must be the actual binary data of the image, not a URL or filename
// see [url]http://www.billy-corgan.com/blog/archive/000143.php[/url] for a brief tutorial on this section
//$SQLquery = 'SELECT `picture` FROM `products` WHERE (`id` = \''.mysql_escape_string(@$_GET['id']).'\')';
if (@$SQLquery) {
// change this information to match your server
$hostname = 'localhost';
$username = 'username';
$password = 'password';
$database = 'database';
if ($cid = @mysql_connect($hostname, $username, $password)) {
if (@mysql_select_db($database, $cid)) {
if ($result = @mysql_query($SQLquery, $cid)) {
if ($row = @mysql_fetch_array($result)) {
mysql_free_result($result);
mysql_close($cid);
$phpThumb->setSourceData($row[0]);
unset($row);
} else {
mysql_free_result($result);
mysql_close($cid);
$phpThumb->ErrorImage('no matching data in database.');
//$phpThumb->ErrorImage('no matching data in database. MySQL said: "'.mysql_error($cid).'"');
}
} else {
mysql_close($cid);
$phpThumb->ErrorImage('Error in MySQL query: "'.mysql_error($cid).'"');
}
} else {
mysql_close($cid);
$phpThumb->ErrorImage('cannot select MySQL database: "'.mysql_error($cid).'"');
}
} else {
$phpThumb->ErrorImage('cannot connect to MySQL server');
}
unset($_GET['id']);
}
////////////////////////////////////////////////////////////////
// Debug output, to try and help me diagnose problems
if (@$_GET['phpThumbDebug'] == '2') {
$phpThumb->phpThumbDebug();
}
////////////////////////////////////////////////////////////////
$allowedGETparameters = array('src', 'new', 'w', 'h', 'f', 'q', 'sx', 'sy', 'sw', 'sh', 'zc', 'bc', 'bg', 'bgt', 'fltr', 'file', 'goto', 'err', 'xto', 'ra', 'ar', 'aoe', 'far', 'iar', 'maxb', 'down', 'phpThumbDebug', 'hash', 'md5s');
foreach ($_GET as $key => $value) {
if (in_array($key, $allowedGETparameters)) {
$phpThumb->$key = $value;
} else {
$phpThumb->ErrorImage('Forbidden parameter: '.$key);
}
}
if (!empty($PHPTHUMB_DEFAULTS)) {
foreach ($PHPTHUMB_DEFAULTS as $key => $value) {
if ($PHPTHUMB_DEFAULTS_GETSTRINGOVERRIDE || !isset($_GET[$key])) {
$phpThumb->$key = $value;
}
}
}
////////////////////////////////////////////////////////////////
// Debug output, to try and help me diagnose problems
if (@$_GET['phpThumbDebug'] == '3') {
$phpThumb->phpThumbDebug();
}
////////////////////////////////////////////////////////////////
// check to see if file can be output from source with no processing or caching
$CanPassThroughDirectly = true;
if (!empty($phpThumb->rawImageData)) {
// data from SQL, should be fine
} elseif (!@is_file(@$_GET['src']) || !@is_readable(@$_GET['src'])) {
$CanPassThroughDirectly = false;
}
foreach ($_GET as $key => $value) {
switch ($key) {
case 'src':
// allowed
break;
default:
// all other parameters will cause some processing,
// therefore cannot pass through original image unmodified
$CanPassThroughDirectly = false;
$UnAllowedGET[] = $key;
break;
}
}
if (!empty($UnAllowedGET)) {
$phpThumb->DebugMessage('Cannot pass through directly because $_GET['.implode(';', array_unique($UnAllowedGET)).'] are set', __FILE__, __LINE__);
}
////////////////////////////////////////////////////////////////
// Debug output, to try and help me diagnose problems
if (@$_GET['phpThumbDebug'] == '4') {
$phpThumb->phpThumbDebug();
}
////////////////////////////////////////////////////////////////
function SendSaveAsFileHeaderIfNeeded() {
global $phpThumb;
if (@$_GET['down']) {
$downloadfilename = ereg_replace('[/\\:\*\?"<>|]', '_', $_GET['down']);
if (phpthumb_functions::version_compare_replacement(phpversion(), '4.1.0', '>=')) {
$downloadfilename = trim($downloadfilename, '.');
}
if (@$downloadfilename) {
$phpThumb->DebugMessage('SendSaveAsFileHeaderIfNeeded() sending header: Content-Disposition: attachment; filename="'.$downloadfilename.'"', __FILE__, __LINE__);
header('Content-Disposition: attachment; filename="'.$downloadfilename.'"');
return true;
}
}
$phpThumb->DebugMessage('SendSaveAsFileHeaderIfNeeded() sending header: Content-Disposition: inline', __FILE__, __LINE__);
header('Content-Disposition: inline');
return true;
}
while ($CanPassThroughDirectly && $phpThumb->src) {
// no parameters set, passthru
$SourceFilename = $phpThumb->ResolveFilenameToAbsolute($phpThumb->src);
if (!GetImageSize($SourceFilename)) {
// security -- prevent passing through of non-image files
$phpThumb->DebugMessage('GetImageSize('.$SourceFilename.') failed (invalid image?)', __FILE__, __LINE__);
} else if (@$_GET['phpThumbDebug']) {
$phpThumb->DebugMessage('Would have passed "'.$SourceFilename.'" through directly, but skipping due to phpThumbDebug', __FILE__, __LINE__);
} else {
// security checks
if ($GetImageSize = @GetImageSize($SourceFilename)) {
$ImageCreateFunctions = array(1=>'ImageCreateFromGIF', 2=>'ImageCreateFromJPEG', 3=>'ImageCreateFromPNG');
if (@$ImageCreateFunctions[$GetImageSize[2]]) {
$theFunction = $ImageCreateFunctions[$GetImageSize[2]];
if (function_exists($theFunction) && ($dummyImage = @$theFunction($SourceFilename))) {
// great
unset($dummyImage);
} else {
$phpThumb->DebugMessage('Not passing "'.$SourceFilename.'" through directly because '.$theFunction.'() failed', __FILE__, __LINE__);
break;
}
} else {
$phpThumb->DebugMessage('Not passing "'.$SourceFilename.'" through directly because GetImageSize() returned unhandled image type "'.$GetImageSize[2].'"', __FILE__, __LINE__);
break;
}
} else {
$phpThumb->DebugMessage('Not passing "'.$SourceFilename.'" through directly because GetImageSize() failed', __FILE__, __LINE__);
break;
}
SendSaveAsFileHeaderIfNeeded();
header('Last-Modified: '.gmdate('D, d M Y H:i:s', @filemtime($SourceFilename)).' GMT');
if ($getimagesize = @GetImageSize($SourceFilename)) {
header('Content-Type: '.phpthumb_functions::ImageTypeToMIMEtype($getimagesize[2]));
}
@readfile($SourceFilename);
exit;
}
break;
}
////////////////////////////////////////////////////////////////
// Debug output, to try and help me diagnose problems
if (@$_GET['phpThumbDebug'] == '5') {
$phpThumb->phpThumbDebug();
}
////////////////////////////////////////////////////////////////
// check to see if file already exists in cache, and output it with no processing if it does
$phpThumb->SetCacheFilename();
if (is_file($phpThumb->cache_filename)) {
$parsed_url = @parse_url(@$_SERVER['HTTP_REFERER']);
if ($phpThumb->config_nooffsitelink_enabled && @$_SERVER['HTTP_REFERER'] && !in_array(@$parsed_url['host'], $phpThumb->config_nooffsitelink_valid_domains)) {
$phpThumb->DebugMessage('Would have used cached (image/'.$phpThumb->thumbnailFormat.') file "'.$phpThumb->cache_filename.'" (Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($phpThumb->cache_filename)).' GMT), but skipping because $_SERVER[HTTP_REFERER] ('.@$_SERVER['HTTP_REFERER'].') is not in $phpThumb->config_nooffsitelink_valid_domains ('.implode(';', $phpThumb->config_nooffsitelink_valid_domains).')', __FILE__, __LINE__);
} elseif ($phpThumb->phpThumbDebug) {
$phpThumb->DebugMessage('Would have used cached file, but skipping due to phpThumbDebug', __FILE__, __LINE__);
$phpThumb->DebugMessage('* Would have sent headers (1): Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($phpThumb->cache_filename)).' GMT', __FILE__, __LINE__);
if ($getimagesize = @GetImageSize($phpThumb->cache_filename)) {
$phpThumb->DebugMessage('* Would have sent headers (2): Content-Type: '.phpthumb_functions::ImageTypeToMIMEtype($getimagesize[2]), __FILE__, __LINE__);
}
if (ereg('^'.preg_quote(str_replace($phpThumb->osslash, '/', $PHPTHUMB_CONFIG['document_root'])).'(.*)$', str_replace($phpThumb->osslash, '/', $phpThumb->cache_filename), $matches)) {
$phpThumb->DebugMessage('* Would have sent headers (3): Location: '.dirname($matches[1]).'/'.urlencode(basename($matches[1])), __FILE__, __LINE__);
} else {
$phpThumb->DebugMessage('* Would have sent headers (3): readfile('.$phpThumb->cache_filename.')', __FILE__, __LINE__);
}
} else {
SendSaveAsFileHeaderIfNeeded();
header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($phpThumb->cache_filename)).' GMT');
if ($getimagesize = @GetImageSize($phpThumb->cache_filename)) {
header('Content-Type: '.phpthumb_functions::ImageTypeToMIMEtype($getimagesize[2]));
}
if (ereg('^'.preg_quote(str_replace($phpThumb->osslash, '/', $PHPTHUMB_CONFIG['document_root'])).'(.*)$', str_replace($phpThumb->osslash, '/', $phpThumb->cache_filename), $matches)) {
header('Location: '.dirname($matches[1]).'/'.urlencode(basename($matches[1])));
} else {
@readfile($phpThumb->cache_filename);
}
exit;
}
} else {
$phpThumb->DebugMessage('Cached file "'.$phpThumb->cache_filename.'" does not exist, processing as normal', __FILE__, __LINE__);
}
////////////////////////////////////////////////////////////////
// Debug output, to try and help me diagnose problems
if (@$_GET['phpThumbDebug'] == '6') {
$phpThumb->phpThumbDebug();
}
////////////////////////////////////////////////////////////////
if ($phpThumb->rawImageData) {
// great
} elseif (!empty($_GET['new'])) {
// generate a blank image resource of the specified size/background color/opacity
if (($phpThumb->w <= 0) || ($phpThumb->h <= 0)) {
$phpThumb->ErrorImage('"w" and "h" parameters required for "new"');
}
@list($bghexcolor, $opacity) = explode('|', $_GET['new']);
if (!phpthumb_functions::IsHexColor($bghexcolor)) {
$phpThumb->ErrorImage('BGcolor parameter for "new" is not valid');
}
$opacity = (strlen($opacity) ? $opacity : 100);
if ($phpThumb->gdimg_source = phpthumb_functions::ImageCreateFunction($phpThumb->w, $phpThumb->h)) {
$alpha = (100 - min(100, max(0, $opacity))) * 1.27;
if ($alpha) {
$phpThumb->is_alpha = true;
ImageAlphaBlending($phpThumb->gdimg_source, false);
ImageSaveAlpha($phpThumb->gdimg_source, true);
}
$new_background_color = phpthumb_functions::ImageHexColorAllocate($phpThumb->gdimg_source, $bghexcolor, false, $alpha);
ImageFilledRectangle($phpThumb->gdimg_source, 0, 0, $phpThumb->w, $phpThumb->h, $new_background_color);
} else {
$phpThumb->ErrorImage('failed to create "new" image ('.$phpThumb->w.'x'.$phpThumb->h.')');
}
} elseif (!$phpThumb->src) {
$phpThumb->ErrorImage('Usage: '.$_SERVER['PHP_SELF'].'?src=/path/and/filename.jpg'."\n".'read Usage comments for details');
} elseif (substr(strtolower($phpThumb->src), 0, 7) == 'http://') {
ob_start();
$HTTPurl = strtr($phpThumb->src, array(' '=>'%20'));
if ($fp = fopen($HTTPurl, 'rb')) {
$rawImageData = '';
do {
$buffer = fread($fp, 8192);
if (strlen($buffer) == 0) {
break;
}
$rawImageData .= $buffer;
} while (true);
fclose($fp);
$phpThumb->setSourceData($rawImageData, urlencode($phpThumb->src));
} else {
$fopen_error = strip_tags(ob_get_contents());
ob_end_clean();
if (ini_get('allow_url_fopen')) {
$phpThumb->ErrorImage('cannot open "'.$HTTPurl.'" - fopen() said: "'.$fopen_error.'"');
} else {
$phpThumb->ErrorImage('"allow_url_fopen" disabled');
}
}
ob_end_clean();
}
////////////////////////////////////////////////////////////////
// Debug output, to try and help me diagnose problems
if (@$_GET['phpThumbDebug'] == '7') {
$phpThumb->phpThumbDebug();
}
////////////////////////////////////////////////////////////////
$phpThumb->GenerateThumbnail();
////////////////////////////////////////////////////////////////
// Debug output, to try and help me diagnose problems
if (@$_GET['phpThumbDebug'] == '8') {
$phpThumb->phpThumbDebug();
}
////////////////////////////////////////////////////////////////
if ($phpThumb->file) {
$phpThumb->RenderToFile($phpThumb->ResolveFilenameToAbsolute($phpThumb->file));
if ($phpThumb->goto && (substr(strtolower($phpThumb->goto), 0, strlen('http://')) == 'http://')) {
// redirect to another URL after image has been rendered to file
header('Location: '.$phpThumb->goto);
exit;
}
} else {
if ((file_exists($phpThumb->cache_filename) && is_writable($phpThumb->cache_filename)) || is_writable(dirname($phpThumb->cache_filename))) {
$phpThumb->CleanUpCacheDirectory();
$phpThumb->RenderToFile($phpThumb->cache_filename);
} else {
$phpThumb->DebugMessage('Cannot write to $phpThumb->cache_filename ('.$phpThumb->cache_filename.') because that directory ('.dirname($phpThumb->cache_filename).') is not writable', __FILE__, __LINE__);
}
}
////////////////////////////////////////////////////////////////
// Debug output, to try and help me diagnose problems
if (@$_GET['phpThumbDebug'] == '9') {
$phpThumb->phpThumbDebug();
}
////////////////////////////////////////////////////////////////
$phpThumb->OutputThumbnail();
?>
and this script
PHP:
<?php header('content-type: image/jpeg');
$watermark = imagecreatefrompng('watermark.png');
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
$image = imagecreatetruecolor($watermark_width, $watermark_height);
$image = imagecreatefromjpeg($_GET['src']);
$size = getimagesize($_GET['src']);
$dest_x = $size[0] - $watermark_width - 5;
$dest_y = $size[1] - $watermark_height - 5;
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100);
imagejpeg($image);
imagedestroy($image);
imagedestroy($watermark);
?>
And I need to run them together. One thumbnails an image using height=xx and width=xx from the URL and the other watermarks it with a PNG.
Does anybody know how I can combine them? I'm not good with PHP at all so I'm sure it's simple, but just sticking them together doesn't work! I either get the thumbnail failing or the watermarking failing.
Cheers,
Rich
Last edited by a moderator:







