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: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387: 388: 389: 390: 391: 392: 393: 394: 395: 396: 397: 398: 399: 400: 401: 402: 403: 404: 405: 406: 407: 408: 409: 410: 411: 412: 413: 414: 415: 416: 417: 418: 419: 420: 421: 422: 423: 424: 425: 426: 427: 428: 429: 430: 431: 432: 433: 434: 435: 436: 437: 438: 439: 440: 441: 442: 443: 444: 445: 446: 447: 448: 449: 450: 451: 452: 453: 454: 455: 456: 457: 458: 459: 460: 461: 462: 463: 464: 465: 466: 467: 468: 469: 470: 471: 472: 473: 474: 475: 476: 477: 478: 479: 480: 481: 482: 483: 484: 485: 486: 487: 488: 489: 490: 491: 492: 493: 494: 495: 496: 497: 498: 499: 500: 501: 502: 503: 504: 505: 506: 507: 508: 509: 510: 511: 512: 513: 514: 515: 516: 517: 518: 519: 520: 521: 522: 523: 524: 525: 526: 527: 528: 529: 530: 531: 532: 533: 534: 535: 536: 537: 538: 539: 540: 541: 542: 543: 544: 545: 546: 547: 548: 549: 550: 551: 552: 553: 554: 555: 556: 557: 558: 559: 560: 561: 562: 563: 564: 565: 566: 567: 568: 569: 570: 571: 572: 573: 574: 575: 576: 577: 578: 579: 580: 581: 582: 583: 584: 585: 586: 587: 588: 589: 590: 591: 592: 593: 594: 595: 596: 597: 598: 599: 600: 601: 602: 603: 604: 605: 606: 607: 608: 609: 610: 611: 612: 613: 614: 615: 616: 617: 618: 619: 620: 621: 622: 623: 624: 625: 626: 627: 628: 629: 630:
<?php
function imageError($status_text, $errormessage, $errorimg = 'err-imagegeneral.png', $image = '', $album='', $newfilename = '') {
$debug = isset($_GET['debug']);
$debuglog_errors = isset($_GET['returnmode']);
if ($debug) {
$debugnote = '<strong>' . sprintf(gettext('Zenphoto Image Processing Error: %s'), $errormessage) . '</strong>';
$debugnote .= '<br /><br />' . sprintf(gettext('Request URI: [ <code>%s</code> ]'), html_encode(getRequestURI()));
$debugnote .= '<br />PHP_SELF: [ <code>' . html_encode($_SERVER['PHP_SELF']) . '</code> ]';
$debugnote .= (empty($newfilename) ? '' : '<br />' . sprintf(gettext('Cache: [<code>%s</code>]'), '/' . CACHEFOLDER . '/' . html_encode(sanitize($newfilename, 3))) . ' ');
$debugnote .= (empty($image) || empty($album) ? '' : ' <br />' . sprintf(gettext('Image: [<code>%s</code>]'), html_encode(sanitize($album . '/' . $image, 3))) . ' <br />');
if($debuglog_errors) {
debugLog($debugnote);
} else {
echo $debugnote;
}
} else {
if (DEBUG_IMAGE_ERR) {
trigger_error($errormessage, E_USER_NOTICE);
}
if(!$debuglog_errors) {
header("HTTP/1.0 $status_text");
header("Status: $status_text");
redirectURL(FULLWEBPATH . '/' . ZENFOLDER . '/images/' . $errorimg);
}
}
exitZP();
}
function imageDebug($album, $image, $args, $imgfile) {
list($size, $width, $height, $cw, $ch, $cx, $cy, $quality, $thumb, $crop) = $args;
echo "Album: [ " . $album . " ], Image: [ " . $image . " ]<br /><br />";
if (file_exists($imgfile)) {
echo "Image filesize: " . filesize($imgfile);
} else {
echo "Image file not found.";
}
echo '<br /><br />';
echo "<strong>" . gettext("Debug") . " <code>i.php</code> | " . gettext("Arguments:") . "</strong><br />\n\n"
?>
<ul>
<li><?php echo gettext("size ="); ?> <strong> <?php echo sanitize($size, 3) ?> </strong></li>
<li><?php echo gettext("width =") ?> <strong> <?php echo sanitize($width, 3) ?> </strong></li>
<li><?php echo gettext("height =") ?> <strong> <?php echo sanitize($height, 3) ?> </strong></li>
<li><?php echo gettext("cw =") ?> <strong> <?php echo sanitize($cw, 3) ?> </strong></li>
<li><?php echo gettext("ch =") ?> <strong> <?php echo sanitize($ch, 3) ?> </strong></li>
<li><?php echo gettext("cx =") ?> <strong> <?php echo sanitize($cx, 3) ?> </strong></li>
<li><?php echo gettext("cy =") ?> <strong> <?php echo sanitize($cy, 3) ?> </strong></li>
<li><?php echo gettext("quality =") ?> <strong> <?php echo sanitize($quality, 3) ?> </strong></li>
<li><?php echo gettext("thumb =") ?> <strong> <?php echo sanitize($thumb, 3) ?> </strong></li>
<li><?php echo gettext("crop =") ?> <strong> <?php echo sanitize($crop, 3) ?> </strong></li>
</ul>
<?php
}
function propSizes($size, $width, $height, $w, $h, $thumb, $image_use_side, $dim) {
$hprop = round(($h / $w) * $dim);
$wprop = round(($w / $h) * $dim);
if ($size) {
if (((($image_use_side == 'longest')) && $h > $w) || ($image_use_side == 'height') || ($image_use_side == 'shortest' && $h < $w)) {
$newh = $dim;
$neww = $wprop;
} else {
$neww = $dim;
$newh = $hprop;
}
} else {
if ($height) {
$newh = $height;
} else {
$newh = $hprop;
}
if ($width) {
$neww = $width;
} else {
$neww = $wprop;
}
}
if (DEBUG_IMAGE)
debugLog("propSizes(\$size=$size, \$width=$width, \$height=$height, \$w=$w, \$h=$h, \$thumb=$thumb, \$image_use_side=$image_use_side, \$dim=$dim):: \$wprop=$wprop; \$hprop=$hprop; \$neww=$neww; \$newh=$newh");
return array($neww, $newh);
}
function iptc_make_tag($rec, $data, $value) {
$length = strlen($value);
$retval = chr(0x1C) . chr($rec) . chr($data);
if ($length < 0x8000) {
$retval .= chr($length >> 8) . chr($length & 0xFF);
} else {
$retval .= chr(0x80) . chr(0x04) . chr(($length >> 24) & 0xFF) . chr(($length >> 16) & 0xFF) . chr(($length >> 8) & 0xFF) . chr($length & 0xFF);
}
return $retval . $value;
}
function cacheImage($newfilename, $imgfile, $args, $allow_watermark = false, $theme, $album) {
global $_zp_gallery;
try {
@list($size, $width, $height, $cw, $ch, $cx, $cy, $quality, $thumb, $crop, $thumbstandin, $passedWM, $adminrequest, $effects) = $args;
if($thumb) {
$image_use_side = getOption('thumb_use_side');
} else {
$image_use_side = getOption('image_use_side');
}
$upscale = getOption('image_allow_upscale');
$allowscale = true;
$sharpenthumbs = getOption('thumb_sharpen');
$sharpenimages = getOption('image_sharpen');
$id = $im = NULL;
$watermark_use_image = getAlbumInherited($album, 'watermark', $id);
if (empty($watermark_use_image)) {
$watermark_use_image = IMAGE_WATERMARK;
}
if (!$effects) {
if ($thumb && getOption('thumb_gray')) {
$effects = 'gray';
} else if (getOption('image_gray')) {
$effects = 'gray';
}
}
$newfile = SERVERCACHE . $newfilename;
mkdir_recursive(dirname($newfile), FOLDER_MOD);
if (DEBUG_IMAGE)
debugLog("cacheImage(\$imgfile=" . basename($imgfile) . ", \$newfilename=$newfilename, \$allow_watermark=$allow_watermark, \$theme=$theme) \$size=$size, \$width=$width, \$height=$height, \$cw=$cw, \$ch=$ch, \$cx=" . (is_null($cx) ? 'NULL' : $cx) . ", \$cy=" . (is_null($cy) ? 'NULL' : $cy) . ", \$quality=$quality, \$thumb=$thumb, \$crop=$crop \$image_use_side=$image_use_side; \$upscale=$upscale);");
if (!file_exists($imgfile) || !is_readable($imgfile)) {
imageError('404 Not Found', sprintf(gettext('Image %s not found or is unreadable.'), filesystemToInternal($imgfile)), 'err-imagenotfound.png');
}
$rotate = false;
if (zp_imageCanRotate()) {
$rotate = getImageRotation($imgfile);
}
$s = getSuffix($imgfile);
if (function_exists('exif_thumbnail') && getOption('use_embedded_thumb') && ($s == 'jpg' || $s == 'jpeg')) {
$im = exif_thumbnail($imgfile, $tw, $th, $tt);
if ($im) {
if ($size) {
$big_enough = $tw >= $size && $th >= $size;
} else {
$big_enough = $tw >= $width && $th >= $height;
}
if ($big_enough) {
$im = zp_imageFromString($im);
if (DEBUG_IMAGE && $im)
debugLog(sprintf(gettext('Using %1$ux%2$u %3$s thumbnail image.'), $tw, $th, image_type_to_mime_type($tt)));
} else {
$im = false;
}
} else {
$im = false;
}
}
if (!$im) {
$im = zp_imageGet($imgfile);
}
if (!$im) {
imageError('404 Not Found', sprintf(gettext('Image %s not renderable (imageGet).'), filesystemToInternal($imgfile)), 'err-failimage.png', $imgfile, $album, $newfilename);
}
if ($rotate) {
if (DEBUG_IMAGE)
debugLog("cacheImage:rotate->$rotate");
$im = zp_rotateImage($im, $rotate);
if (!$im) {
imageError('404 Not Found', sprintf(gettext('Image %s not rotatable.'), filesystemToInternal($imgfile)), 'err-failimage.png', $imgfile, $album, $newfilename);
}
}
$w = zp_imageWidth($im);
$h = zp_imageHeight($im);
$ratio_in = '';
$ratio_out = '';
$crop = ($crop || $cw != 0 || $ch != 0);
if (!empty($size)) {
$dim = $size;
if ($crop) {
$dim = $size;
if (!$ch)
$ch = $size;
if (!$cw)
$cw = $size;
$width = $cw;
$height = $ch;
$size = false;
} else {
$width = $height = false;
}
} else if (!empty($width) && !empty($height)) {
$ratio_in = $h / $w;
$ratio_out = $height / $width;
if ($ratio_in > $ratio_out) {
$thumb = true;
$dim = $width;
if (!$ch)
$ch = $height;
} else {
$dim = $height;
if (!$cw)
$cw = $width;
}
} else if (!empty($width)) {
$dim = $width;
$size = $height = false;
} else if (!empty($height)) {
$dim = $height;
$size = $width = false;
} else {
imageError('404 Not Found', sprintf(gettext('Unknown error processing %s! Please report to the developers at <a href="http://www.zenphoto.org/">www.zenphoto.org</a>'), filesystemToInternal($imgfile)), 'err-imagegeneral.png', $imgfile, $album, $newfilename);
}
$sizes = propSizes($size, $width, $height, $w, $h, $thumb, $image_use_side, $dim);
list($neww, $newh) = $sizes;
if (DEBUG_IMAGE)
debugLog("cacheImage:" . basename($imgfile) . ": \$size=$size, \$width=$width, \$height=$height, \$w=$w; \$h=$h; \$cw=$cw, " .
"\$ch=$ch, \$cx=$cx, \$cy=$cy, \$quality=$quality, \$thumb=$thumb, \$crop=$crop, \$newh=$newh, \$neww=$neww, \$dim=$dim, " .
"\$ratio_in=$ratio_in, \$ratio_out=$ratio_out \$upscale=$upscale \$rotate=$rotate \$effects=$effects");
if (!$upscale && $newh >= $h && $neww >= $w) {
$neww = $w;
$newh = $h;
$allowscale = false;
if ($crop) {
if ($width > $neww) {
$width = $neww;
}
if ($height > $newh) {
$height = $newh;
}
}
if (DEBUG_IMAGE)
debugLog("cacheImage:no upscale " . basename($imgfile) . ": \$newh=$newh, \$neww=$neww, \$crop=$crop, \$thumb=$thumb, \$rotate=$rotate, watermark=" . $watermark_use_image);
}
$watermark_image = false;
if ($passedWM) {
if ($passedWM != NO_WATERMARK) {
$watermark_image = getWatermarkPath($passedWM);
if (!file_exists($watermark_image)) {
$watermark_image = SERVERPATH . '/' . ZENFOLDER . '/images/imageDefault.png';
}
}
} else {
if ($allow_watermark) {
$watermark_image = $watermark_use_image;
if ($watermark_image) {
if ($watermark_image != NO_WATERMARK) {
$watermark_image = getWatermarkPath($watermark_image);
if (!file_exists($watermark_image)) {
$watermark_image = SERVERPATH . '/' . ZENFOLDER . '/images/imageDefault.png';
}
}
}
}
}
if ($crop) {
if ($cw > $ch) {
$ir = $ch / $cw;
} else {
$ir = $cw / $ch;
}
if ($size) {
$neww = $size;
$newh = $ir * $size;
} else {
$neww = $width;
$newh = $height;
if ($neww > $newh) {
if ($newh === false) {
$newh = $ir * $neww;
}
} else {
if ($neww === false) {
$neww = $ir * $newh;
}
}
}
if (is_null($cx) && is_null($cy)) {
$cf = 1;
if ($cw)
$cf = min($cf, $cw / $neww);
if ($ch)
$cf = min($cf, $ch / $newh);
if (!$cw || $w / $cw * $ch > $h) {
$cw = round($h / $ch * $cw * $cf);
$ch = round($h * $cf);
$cx = round(($w - $cw) / 3);
} else {
$ch = round($w / $cw * $ch * $cf);
$cw = round($w * $cf);
$cy = round(($h - $ch) / 3);
}
} else {
if (!$cw || $cw > $w)
$cw = $w;
if (!$ch || $ch > $h)
$ch = $h;
}
if ($cw + $cx > $w)
$cx = $w - $cw;
if ($cx < 0) {
$cw = $cw + $cx;
$cx = 0;
}
if ($ch + $cy > $h)
$cy = $h - $ch;
if ($cy < 0) {
$ch = $ch + $cy;
$cy = 0;
}
if (DEBUG_IMAGE)
debugLog("cacheImage:crop " . basename($imgfile) . ":\$size=$size, \$width=$width, \$height=$height, \$cw=$cw, \$ch=$ch, \$cx=$cx, \$cy=$cy, \$quality=$quality, \$thumb=$thumb, \$crop=$crop, \$rotate=$rotate");
switch (getSuffix($newfilename)) {
case 'gif':
$newim = zp_createImage($neww, $newh, false);
$newim = zp_imageResizeTransparent($newim, $neww, $newh);
break;
case 'png':
case 'webp':
default:
$newim = zp_createImage($neww, $newh);
if (in_array(getSuffix($newfilename), array('png', 'webp'))) {
$newim = zp_imageResizeAlpha($newim, $neww, $newh);
}
break;
}
if (!zp_resampleImage($newim, $im, 0, 0, $cx, $cy, $neww, $newh, $cw, $ch)) {
imageError('404 Not Found', sprintf(gettext('Image %s not renderable (resample).'), filesystemToInternal($imgfile)), 'err-failimage.png', $imgfile, $album, $newfilename);
}
} else {
if ($newh >= $h && $neww >= $w && !$rotate && !$effects && !$watermark_image && (!$upscale || $newh == $h && $neww == $w)) {
if (SYMLINK && @symlink($imgfile, $newfile)) {
if (DEBUG_IMAGE)
debugLog("cacheImage:symlink original " . basename($imgfile) . ":\$size=$size, \$width=$width, \$height=$height, \$dim=$dim, \$neww=$neww; \$newh=$newh; \$quality=$quality, \$thumb=$thumb, \$crop=$crop, \$rotate=$rotate; \$allowscale=$allowscale;");
clearstatcache();
return true;
} else if (@copy($imgfile, $newfile)) {
if (DEBUG_IMAGE)
debugLog("cacheImage:copy original " . basename($imgfile) . ":\$size=$size, \$width=$width, \$height=$height, \$dim=$dim, \$neww=$neww; \$newh=$newh; \$quality=$quality, \$thumb=$thumb, \$crop=$crop, \$rotate=$rotate; \$allowscale=$allowscale;");
clearstatcache();
return true;
}
}
if ($allowscale) {
$sizes = propSizes($size, $width, $height, $w, $h, $thumb, $image_use_side, $dim);
list($neww, $newh) = $sizes;
}
if (DEBUG_IMAGE)
debugLog("cacheImage:no crop " . basename($imgfile) . ":\$size=$size, \$width=$width, \$height=$height, \$dim=$dim, \$neww=$neww; \$newh=$newh; \$quality=$quality, \$thumb=$thumb, \$crop=$crop, \$rotate=$rotate; \$allowscale=$allowscale;");
switch (getSuffix($newfilename)) {
case 'gif':
$newim = zp_createImage($neww, $newh, false);
$newim = zp_imageResizeTransparent($newim, $neww, $newh);
break;
case 'png':
case 'webp':
default:
$newim = zp_createImage($neww, $newh);
if (in_array(getSuffix($newfilename), array('png', 'webp'))) {
$newim = zp_imageResizeAlpha($newim, $neww, $newh);
}
break;
}
if (!zp_resampleImage($newim, $im, 0, 0, 0, 0, $neww, $newh, $w, $h)) {
imageError('404 Not Found', sprintf(gettext('Image %s not renderable (resample).'), filesystemToInternal($imgfile)), 'err-failimage.png', $imgfile, $album, $newfilename);
}
if (($thumb && $sharpenthumbs) || (!$thumb && $sharpenimages)) {
if (!zp_imageUnsharpMask($newim, getOption('sharpen_amount'), getOption('sharpen_radius'), getOption('sharpen_threshold'))) {
imageError('404 Not Found', sprintf(gettext('Image %s not renderable (unsharp).'), filesystemToInternal($imgfile)), 'err-failimage.png', $imgfile, $album, $newfilename);
}
}
}
$imgEffects = explode(',', $effects);
if (in_array('gray', $imgEffects)) {
zp_imageGray($newim);
}
$newim = addWatermark($newim, $watermark_image, $imgfile);
@chmod($newfile, 0777);
if (zp_imageOutput($newim, getSuffix($newfile), $newfile, $quality)) {
if (getOption('EmbedIPTC') && getSuffix($newfilename) == 'jpg' && GRAPHICS_LIBRARY != 'Imagick') {
global $_zp_extra_filetypes;
if (!$_zp_extra_filetypes)
$_zp_extra_filetypes = array();
require_once(dirname(__FILE__) . '/functions.php');
$iptc = array(
'1#090' => chr(0x1b) . chr(0x25) . chr(0x47),
'2#115' => $_zp_gallery->getTitle()
);
$iptc_data = zp_imageIPTC($imgfile);
if ($iptc_data) {
$iptc_data = iptcparse($iptc_data);
if ($iptc_data)
$iptc = array_merge($iptc_data, $iptc);
}
$imgfile = str_replace(ALBUM_FOLDER_SERVERPATH, '', $imgfile);
$imagename = basename($imgfile);
$albumname = dirname($imgfile);
$image = newImage(newAlbum($albumname), $imagename);
$copyright = $image->getCopyright();
if (empty($copyright)) {
$copyright = getOption('copyright_image_notice');
}
if (!empty($copyright)) {
$iptc['2#116'] = $copyright;
}
$credit = $image->getCredit();
if (!empty($credit)) {
$iptc['2#110'] = $credit;
}
$iptc_result = '';
foreach ($iptc as $tag => $string) {
$tag_parts = explode('#', $tag);
if (is_array($string)) {
foreach ($string as $element) {
$iptc_result .= iptc_make_tag($tag_parts[0], $tag_parts[1], $element);
}
} else {
$iptc_result .= iptc_make_tag($tag_parts[0], $tag_parts[1], $string);
}
}
$content = iptcembed($iptc_result, $newfile);
$fw = fopen($newfile, 'w');
fwrite($fw, $content);
fclose($fw);
clearstatcache();
}
@chmod($newfile, FILE_MOD);
if (DEBUG_IMAGE)
debugLog('Finished:' . basename($imgfile));
} else {
if (DEBUG_IMAGE)
debugLog('cacheImage: failed to create ' . $newfile);
imageError('404 Not Found', sprintf(gettext('cacheImage: failed to create %s'), $newfile), 'err-failimage.png', $imgfile, $album, $newfilename);
}
@chmod($newfile, FILE_MOD);
zp_imageKill($newim);
zp_imageKill($im);
} catch (Exception $e) {
debugLog('cacheImage(' . $newfilename . ') exception: ' . $e->getMessage());
imageError('404 Not Found', sprintf(gettext('cacheImage(%1$s) exception: %2$s'), $newfilename, $e->getMessage()), 'err-failimage.png', $imgfile, $album, $newfilename);
return false;
}
clearstatcache();
return true;
}
function getImageRotation($imgfile) {
$rotation = false;
$imgfile_db = substr(filesystemToInternal($imgfile), strlen(ALBUM_FOLDER_SERVERPATH));
$result = query_single_row('SELECT EXIFOrientation FROM ' . prefix('images') . ' AS i JOIN ' . prefix('albums') . ' as a ON i.albumid = a.id WHERE ' . db_quote($imgfile_db) . ' = CONCAT(a.folder,"/",i.filename)');
if (is_null($result)) {
if (in_array(getSuffix($imgfile), array('jpg', 'jpeg', 'tif', 'tiff'))) {
$result = exif_read_data($imgfile);
if (is_array($result) && array_key_exists('Orientation', $result)) {
$rotation = $result['Orientation'];
}
}
} else if (is_array($result) && array_key_exists('EXIFOrientation', $result)) {
$splits = preg_split('/!([(0-9)])/', $result['EXIFOrientation']);
$rotation = $splits[0];
}
if ($rotation) {
switch ($rotation) {
case 1 : return false;
case 2 : return false;
case 3 : return 180;
case 4 : return 180;
case 5 : return 270;
case 6 : return 270;
case 7 : return 90;
case 8 : return 90;
}
}
return false;
}
function addWatermark($newim, $watermark_image, $imgfile = null) {
if ($watermark_image) {
$watermark = zp_imageGet($watermark_image);
if (!$watermark) {
imageError('404 Not Found', sprintf(gettext('Watermark %s not renderable.'), $watermark_image), 'err-failimage.png');
}
$offset_h = getOption('watermark_h_offset') / 100;
$offset_w = getOption('watermark_w_offset') / 100;
$percent = getOption('watermark_scale') / 100;
$watermark_width = zp_imageWidth($watermark);
$watermark_height = zp_imageHeight($watermark);
$imw = zp_imageWidth($newim);
$imh = zp_imageHeight($newim);
$nw = sqrt(($imw * $imh * $percent) * ($watermark_width / $watermark_height));
$nh = $nw * ($watermark_height / $watermark_width);
$r = sqrt(($imw * $imh * $percent) / ($watermark_width * $watermark_height));
$r = min(1, $r);
$nw = round($watermark_width * $r);
$nh = round($watermark_height * $r);
$watermark_new = false;
if ($nw != $watermark_width || $nh != $watermark_height) {
$watermark_new = zp_imageResizeAlpha($watermark, $nw, $nh);
if (!zp_resampleImage($watermark_new, $watermark, 0, 0, 0, 0, $nw, $nh, $watermark_width, $watermark_height)) {
imageError('404 Not Found', sprintf(gettext('Watermark %s not resizeable.'), $watermark_image), 'err-failimage.png');
}
}
if ($watermark_new === false) {
$watermark_new = $watermark;
}
$dest_x = max(0, floor(($imw - $nw) * $offset_w));
$dest_y = max(0, floor(($imh - $nh) * $offset_h));
if (!is_null($imgfile) && DEBUG_IMAGE) {
debugLog("Watermark:" . basename($imgfile) . ": \$offset_h=$offset_h, \$offset_w=$offset_w, \$watermark_height=$watermark_height, \$watermark_width=$watermark_width, \$imw=$imw, \$imh=$imh, \$percent=$percent, \$r=$r, \$nw=$nw, \$nh=$nh, \$dest_x=$dest_x, \$dest_y=$dest_y");
}
if (!zp_copyCanvas($newim, $watermark_new, $dest_x, $dest_y, 0, 0, $nw, $nh)) {
imageError('404 Not Found', sprintf(gettext('Image %s not renderable (copycanvas).'), filesystemToInternal($imgfile)), 'err-failimage.png', $imgfile, $album, $newfilename);
}
zp_imageKill($watermark);
if (GRAPHICS_LIBRARY != 'GD' || (GRAPHICS_LIBRARY == 'GD' && get_resource_type($watermark_new) == 'gd')) {
zp_imageKill($watermark_new);
}
}
return $newim;
}