0) { puttwg_rot(http_encode($image), $twg_rot); } else { $fp = fopen(http_encode($image), "rb"); while ($content = fread($fp, 8192)) { print $content; } fclose($fp); } } function putpngimage($image) { // set Documet Type $oldsize = getImageSize($image); // for broken images we set png! if ($oldsize[0] == 0) { $oldsize[2] = 3; } set_image_header($oldsize[2]); // done because it could be renamed jpgs too! if (substr($image, 4, 3) != "://") { header("Content-Length: ".filesize($image)); } $fp = fopen($image, "rb"); while ($content = fread($fp, 8192)) { print $content; } fclose($fp); } function putwatermarkimage($image, $dir, $twg_rot) { global $font, $fontsize_original, $text, $textcolor_R, $textcolor_G, $textcolor_B, $position, $modifyheader; global $watermark_big, $open_download_in_browser, $print_watermark_original, $print_text_original; $oldsize = getImageSize($image); // for broken images we try to read the exif data! if ($oldsize[0] == 0) { $oldsize = get_image_exif_size($image, $image); } $image_type = $oldsize[2]; set_image_header($image_type); set_attachment_header($image, $modifyheader , $image_type); // header("Content-Length: ".filesize($image)); $dst = loadImage ($image, $image_type); if (($twg_rot > 0)) { $dst = imagerotate($dst, $twg_rot, 0); } if ($print_text_original && function_exists("imagettftext")) { $color = imagecolorclosest($dst, $textcolor_R, $textcolor_G, $textcolor_B); if ($image_type != 2) { // antialising only for jpgs $color = -$color; } $text = getFileContent($dir . "/watermark.txt" , $text); if (function_exists("imagettftext")) { imagettftext($dst, $fontsize_original, 0, 7, $oldsize[1]-7, $color, $font, $text); } } if ($print_watermark_original) { if (file_exists($dir . "/watermark_big.png")) { $watermark_big = $dir . "/watermark_big.png"; } watermark($dst, $watermark_big , $oldsize[0], $oldsize[1], $oldsize[2], $position); } store_image($dst, "", $image_type, 100); } function puttwg_rot($image, $angle) { global $compression; $oldsize = getImageSize($image); // for broken images we set jpeg! if ($oldsize[0] == 0) { $oldsize = get_image_exif_size($image, $image); } $image_type = $oldsize[2]; set_image_header($image_type); $src = loadImage ($image, $image_type); $dst = imagecreatetruecolor($oldsize[0], $oldsize[1]); keepTransparency($image_type, $src, $dst, $oldsize[0], $oldsize[1]); imagecopyresampled($dst, $src, 0, 0, 0, 0, $oldsize[0], $oldsize[1], $oldsize[0], $oldsize[1]); $twg_rot = imagerotate($dst, $angle, 0); $result = store_image($twg_rot, "",$image_type, $compression); if (!$result) { store_image($dst, "", $image_type,$compression); } else { imagedestroy($dst); } } function generatesmall($image, $small, $size, $compression, $twg_rot, $dir, $otherwatermark = false, $isbackground = false) { global $text, $textcolor_R, $textcolor_G, $textcolor_B, $use_small_pic_size_as_height; global $small_pic_size, $thumb_pic_size, $comment_corner_size, $comment_corner_backcolor_R; global $comment_corner_backcolor_G, $comment_corner_backcolor_B, $print_watermark; global $watermark_small, $maxXSize, $position, $watermark_position, $other_file_formats; global $transparency, $watermark_transparency, $print_memory_usage, $install_dir; global $use_image_magic,$image_magic_path; global $login_edit, $comment, $small_pic_size, $print_text, $font, $fontsize, $show_clipped_images; if ($isbackground) { $show_clipped_images = $print_text = $print_watermark = false; } if ($print_memory_usage) debug("generatesmall - mem - start(" . $small . ") : " . get_mem()); $srcx = 0; // for clipped images to center them! $srcy = 0; if (file_exists($image) || substr($image, 4, 3) == "://") { $oldsize = getimagesize(http_encode($image)); if ($oldsize[0] == 0) { $oldsize = get_image_exif_size($image, $image); } $oldsizex = $oldsize[0]; $oldsizey = $oldsize[1]; $image_type = $oldsize[2]; if (!$show_clipped_images) { if ($oldsizex > $oldsizey) { // querformat if (($use_small_pic_size_as_height) && ($size == $small_pic_size)) { // horizontals are bigger then verticals images if (($twg_rot == 90 || $twg_rot == 270) && ($login_edit)) { $width = $size; $height = ($width / $oldsizex) * $oldsizey; } else { $height = $size; $width = $height / $oldsizey * $oldsizex; if ($width > $maxXSize && (($oldsizex / $oldsizey) > 1.5)) { // we fix images which are too wide! (factor 1.5!) $width = $maxXSize; $height = ($width / $oldsizex) * $oldsizey; } } } else { // this keeps the dimension between horzonal and vertical $width = $size; $height = ($width / $oldsizex) * $oldsizey; } } else { // hochformat if (($use_small_pic_size_as_height) && ($size == $small_pic_size)) { // horizontals are bigger then verticals images if (($twg_rot == 90 || $twg_rot == 270) && ($login_edit)) { $height = ($size * $oldsizey) / $oldsizex; $width = $size; } else { $height = $size; $width = ($height / $oldsizey) * $oldsizex; } } else { // this keeps the dimension between horzonal an vertical $height = $size; $width = ($height / $oldsizey) * $oldsizex; } } } else { $width = $size; $height = $size; $quer = false; if ($oldsizex > $oldsizey) { // querformat $quer=true; $srcx = ($oldsizex - $oldsizey) / 2; $oldsizex = $oldsizey; } else { // $srcy = ($oldsizey - $oldsizex) / 2; $oldsizey = $oldsizex; } } $width=round($width); $height=round($height); if ($print_memory_usage) debug("generatesmall - mem - before loading src(" . $small . ") : " . get_mem()); $save_image = true; if ($use_image_magic) { // convert -geometry 60x80 image.gif out.gif $width x $height $fh = fopen($small, 'w'); // fix for a but in some php - versions - thanks to Anders fclose($fh); $resize= $width."x".$height; $cl = ""; if ($show_clipped_images) { $cl = " -gravity center -crop ".$size."x".$size."+0+0 "; // I remove repage - seems not to work on all systems! if ($quer) { // querformat $resize = "x".$height; } else { $resize = $width . "x"; } } $command = $image_magic_path . " \"" . realpath($image) . "\" -quality ".$compression." -resize " . $resize . $cl . " \"" . realpath($small) . "\""; execute_command ($command); $save_image=false; if ($print_memory_usage) debug("generatesmall - mem - after image magic (" . $small . ") : " . get_mem()); // we check if image magic was working properly if (file_exists($small) && (filesize($small) > 0)) { $dst = loadImage ($small, 2); } else { if (file_exists($small)) { unlink($small); } debug("Image magick failed: " . $command); $dst = loadImage ($install_dir . "buttons/notvalidmagic.gif", 1); $use_image_magic = false; $save_image = true; } // we load the dest image for further processing! } else { $memory = ($oldsizex * $oldsizey * 6) + 2000000; // mem usage and we add 2MB for processing try_to_increase_mem($memory); $free_memory = get_free_mem(); if ($memory > $free_memory && $free_memory > 0) { // memory problem debug("File '" . $image . "' is too big - it uses ~ " . floor($memory/1024) . " KB. The free memory is " . floor($free_memory/1024) . " KB. Check the info for the maximum resolution! Please resize the image with an external tool or increase the php memory! If you have autocreate_folder_image=true please turn this off."); move_problem_image($image); return false; } else { $src = loadImage ($image, $image_type); } if (!$src) { // if image is not valid! if (!move_problem_image($image)) { $dst = loadImage ($install_dir . "buttons/notvalid.gif", 1); $srcx=0; $srcy=0; $oldsizex = 280; $oldsizey = 160; } else { return false; } } if ($print_memory_usage) debug("generatesmall - mem - after loading src(" . $small . ") : " . get_mem()); $dst = ImageCreateTrueColor($width, $height); keepTransparency($image_type, $src, $dst, $width, $height); if ($print_memory_usage) debug("generatesmall - mem - before imagecopyresampled (" . $small . ") : " . get_mem()); // center clipped images ! - but only the vertical ones - horizontal are mainly images of people and there the upper part should be shown if ($width == $oldsizex && $height == $oldsizey) { // we only resize if really needed! imagedestroy($dst); $dst = $src; } else { imagecopyresampled($dst, $src, 0, 0, $srcx, $srcy , $width, $height, $oldsizex, $oldsizey); imagedestroy($src); } if ($print_memory_usage) debug("generatesmall - mem - after imagecopyresampled (" . $small . ") : " . get_mem()); } if (true) { if ($comment && ($size == $thumb_pic_size)) { // set up array of points for polygon $values = array($width - $comment_corner_size, 0, $width, 0, $width , $comment_corner_size); $white = imagecolorclosest ($dst, $comment_corner_backcolor_R, $comment_corner_backcolor_G, $comment_corner_backcolor_B); // draw a polygon imagefilledpolygon($dst, $values, 3, $white); $save_image=true; } if ($print_memory_usage) debug("generatesmall - mem - after mark comment (" . $small . ") : " . get_mem()); if (($twg_rot > 0) && ($login_edit)) { $dst = imagerotate($dst, $twg_rot, 0); $save_image=true; } if ($print_memory_usage) debug("generatesmall - mem - after rotate (" . $small . ") : " . get_mem()); if (($size == $small_pic_size) && $print_text) { if (function_exists("imagettftext")) { $text = getFileContent($dir . "/watermark.txt" , $text); $color = imagecolorclosest ($dst, $textcolor_R, $textcolor_G, $textcolor_B); if ($image_type != 2) { // antialising only for jpgs $color = -$color; } if ($twg_rot == 90 || $twg_rot == 270) { imagettftext($dst, $fontsize, 0, 7, $width-7, $color, $font, $text); } else { imagettftext($dst, $fontsize, 0, 7, $height-7, $color, $font, $text); } $save_image=true; } } if ($print_memory_usage) debug("generatesmall - mem - after textwatermark (" . $small . ") : " . get_mem()); if (($size == $small_pic_size || ($watermark_small == $install_dir . "buttons/private.gif" )) && $print_watermark) { if (file_exists($dir . "/watermark.png")) { $watermark_small = $dir . "/watermark.png"; } if ($twg_rot == 90 || $twg_rot == 270) { watermark($dst, $watermark_small , $height, $width, $oldsize[2], $position); } else { watermark($dst, $watermark_small , $width, $height, $oldsize[2], $position); } $save_image=true; } if ($print_memory_usage) debug("generatesmall - mem - after image watermark (" . $small . ") : " . get_mem()); // we serach for an other file format! foreach($other_file_formats as $label => $key) { $other_format = exchangeExtension($image, $label); $other_format2 = removeExtension($image); if (!$isbackground && (file_exists($other_format) || file_exists($other_format2) || ($otherwatermark == $label))) { $transparency = $watermark_transparency; if ($otherwatermark) { $key = "../" . $key; } watermark($dst, $key , $width, $height, $oldsize[2], $watermark_position); $save_image=true; break; } } if ($print_memory_usage) debug("generatesmall - mem - after other format watermark (" . $small . ") : " . get_mem()); } if ($save_image) { if (!$use_image_magic) { $fh = fopen($small, 'w'); // fix for a but in some php - versions - thanks to Anders fclose($fh); } $result = store_image($dst, $small,$image_type, $compression); if ($result) { if ($print_memory_usage) debug("generatesmall - mem - after saving (" . $small . ") : " . get_mem()); } else { debug('cannot save: ' . $small); } } else { $result = true; // already saved } return $result; } else return false; } function generatefull($image,$sizex,$sizey,$compression, $twg_rot, $dir, $filename = false) { global $print_text, $font, $fontsize, $text, $textcolor_R, $textcolor_G, $position; global $textcolor_B, $print_watermark, $watermark_small; // $browserx, $browsery; global $enable_random_image_caching, $thumb_pic_size; if (file_exists($image) || substr($image, 4, 3) == "://") { $oldsize = getimagesize(http_encode($image)); if ($oldsize[0] == 0) { $oldsize = get_image_exif_size($image, $image); } $oldsizex = $oldsize[0]; $oldsizey = $oldsize[1]; $image_type = $oldsize[2]; if (($twg_rot != 0) && ($twg_rot != 180)) { // quer $tempsize = $sizex; $sizex = $sizey; $sizey = $tempsize; } $height = $sizey; $width = ($height / $oldsizey) * $oldsizex; if ($width > $sizex) { $width = $sizex; $height = ($width / $oldsizex) * $oldsizey; } $memory = ($oldsizex * $oldsizey * 6) + 2000000; // mem usage and we add 2MB for processing try_to_increase_mem($memory); $src = loadImage ($image, $image_type); $dst = ImageCreateTrueColor($width, $height); keepTransparency($image_type, $src, $dst, $width, $height); imagecopyresampled($dst, $src, 0, 0, 0, 0, $width, $height, $oldsizex, $oldsizey); imagedestroy($src); if ($twg_rot > 0) { $dst = imagerotate($dst, $twg_rot, 0); } if ($print_text && ($sizex > 300)) { if (function_exists("imagettftext")) { $text = getFileContent($dir . "/watermark.txt" , $text); $color = imagecolorclosest ($dst, $textcolor_R, $textcolor_G, $textcolor_B); if ($image_type != 2) { // antialising only for jpgs $color = -$color; } if ($twg_rot == 90 || $twg_rot == 270) { imagettftext($dst, $fontsize, 0, 7, $width-7, $color, $font, $text); } else { imagettftext($dst, $fontsize, 0, 7, $height-7, $color, $font, $text); } } } if ($print_watermark && ($sizex > 300)) { // todo - look for a local small watermark if (file_exists($dir . "/watermark.png")) { $watermark_small = $dir . "/watermark.png"; } if ($twg_rot == 90 || $twg_rot == 270) { watermark($dst, $watermark_small , $height, $width, $oldsize[2], $position); } else { watermark($dst, $watermark_small , $width, $height, $oldsize[2], $position); } } // set Documet Type set_image_header($image_type); // we cache the random image if ($filename && $enable_random_image_caching && ($sizex != $thumb_pic_size)) { $result = store_image($dst, $filename,$image_type, $compression, false); } $result = store_image($dst, "", $image_type,$compression); if (!$result) { debug('cannot send: ' . $image); } return $result; } else return false; } /* Generates the images for the random function */ function generaterandom($image, $size, $compression, $twg_rot, $dir, $filename) { return generatefull ($image, $size, $size, $compression, $twg_rot, $dir, $filename); } function generatetwg_slideshow($image, $small, $size, $compression, $small_cache, $twg_rot, $dir) { global $small_pic_size; global $slideshow_backcolor_R; global $slideshow_backcolor_G; global $slideshow_backcolor_B; global $print_text; global $font; global $fontsize; global $text; global $textcolor_R; global $textcolor_G; global $textcolor_B; global $use_small_pic_size_as_height; global $resize_only_if_too_big; $resize = true; if (file_exists($small_cache)) { $image = $small_cache; } else { // we generate the small one first - is needed sometimes anyway :). if ($compression < 90) { $compression += 5; } // we check if the size is ok - if the image is too small ... $oldsize = getimagesize($image); if ($oldsize[0] == 0) { $oldsize = get_image_exif_size($image, $image); } $resize = (!((($small_pic_size >= $oldsize[0]) || $use_small_pic_size_as_height) && ($small_pic_size >= $oldsize[1]) && $resize_only_if_too_big)); if ($resize) { generatesmall($image, $small_cache, $size, $compression, $twg_rot, $dir); $image = $small_cache; } } $maxwidth = ceil($small_pic_size * 1.35); // this is the maximum width we show !! the factor has to be changed in the twg_slide_typetwg_show as well!! if (file_exists($image) || substr($image, 4, 3) == "://") { $oldsize = getimagesize($image); if ($oldsize[0] == 0) { $oldsize = get_image_exif_size($image, $image); } if ($use_small_pic_size_as_height) { $pic_size_x = $maxwidth; } else { $pic_size_x = $small_pic_size; } $pic_size_y = $small_pic_size; if ($oldsize[0] > $oldsize[1]) { // querformat if ($use_small_pic_size_as_height) { if ($resize_only_if_too_big) { if ($oldsize[0] <= $small_pic_size) { $width = $oldsize[0]; $height = $oldsize[1]; } else { if (($oldsize[0] / $oldsize[1]) <= 1.35) { // normal image where the width will fit into ou height! $width = ($size / $oldsize[1]) * $oldsize[0]; $height = $size; } else { // panorama $width = $maxwidth; $height = ($maxwidth / $oldsize[0]) * $oldsize[1]; } } } else if (($oldsize[0] / $oldsize[1]) <= 1.35) { // normal image where the width will fit into ou height! $width = ($size / $oldsize[1]) * $oldsize[0]; $height = $size; } else { // panorama $width = $maxwidth; $height = ($maxwidth / $oldsize[0]) * $oldsize[1]; } } else if ($resize_only_if_too_big) { // we check if we have to resize at all! if (($oldsize[0] <= $small_pic_size) && ($oldsize[1] <= $small_pic_size)) { $width = $oldsize[0]; $height = $oldsize[1]; } else { $width = $size; $height = ($width / $oldsize[0]) * $oldsize[1]; } } else { $width = $size; $height = ($width / $oldsize[0]) * $oldsize[1]; } } else if ($resize_only_if_too_big) { // we check if we have to resize at all! if (($oldsize[0] <= $small_pic_size) && ($oldsize[1] <= $small_pic_size)) { $width = $oldsize[0]; $height = $oldsize[1]; } else { $height = $size; $width = ($height / $oldsize[1]) * $oldsize[0]; } } else { $height = $size; $width = ($height / $oldsize[1]) * $oldsize[0]; } $topleft_x = ($pic_size_x - $width) / 2; $topleft_y = ($pic_size_y - $height) / 2; $memory = ($oldsize[0] * $oldsize[1] * 6) + 2000000; // mem usage and we add 2MB for processing try_to_increase_mem($memory); $image_type = $oldsize[2]; $src = loadImage ($image, $image_type); $dst = ImageCreateTrueColor($pic_size_x, $pic_size_y); keepTransparency($image_type, $src, $dst, $pic_size_x, $pic_size_y); $near_white = imageColorClosest($dst, $slideshow_backcolor_R, $slideshow_backcolor_G, $slideshow_backcolor_B); imagefilledrectangle ($dst, 0 , 0, $pic_size_x, $pic_size_y, $near_white); imagecopyresampled($dst, $src, $topleft_x, $topleft_y, 0, 0, $width, $height, $oldsize[0], $oldsize[1]); imagedestroy($src); $near_black = imageColorClosest($dst, 0, 0, 0); imagerectangle($dst, $topleft_x , $topleft_y , $topleft_x + $width - 1 , $topleft_y + $height - 1 , $near_black); $fh = fopen($small, 'w'); fclose($fh); return store_image($dst, $small,$image_type,$compression); } else return false; } // optimize the small ones as well !! function replaceSonderzeichen25($name) { // $name = str_replace("%25", "%", $name); // $name = str_replace("%2B", "+", $name); return $name; } function watermark($dst, $watermark, $width, $heigth, $info, $position) { // Michael Müller, 05.03.2004 17:05, www.php4u.net // Positionen: // 1 oben links // 2 oben mittig // 3 oben rechts // 4 Mitte links // 5 Mitte // 6 Mitte rechts // 7 unten links // 8 unten mittig // 9 unten rechts // erlaubt sind png und jpeg global $transparency; global $t_x; global $t_y; global $charset; global $install_dir; $watermark = $install_dir . $watermark; $infos_img[0] = $width; $infos_img[1] = $heigth; $infos_img[2] = $info; if ($position < 1 || $position > 9) { debug("Wrong position of the watermark - image is not created!"); return false; } if (!file_exists($watermark)) { debug("Watermark ".$watermark." not found - image is not created!"); return false; } $infos_wat = getimagesize($watermark); if (!in_array($infos_img[2], array(1,2, 3)) || !in_array($infos_wat[2], array(1,2, 3))) { debug("Wrong type of the watermark - image is not created!"); return false; } if ($infos_img[0] < $infos_wat[0] || $infos_img[1] < $infos_wat[1]) { // debug("watermark is too big - image is not created!"); return false; } if ($infos_wat[0] < $t_x || $infos_wat[1] < $t_y) { // debug("watermark is too big - image is not created!"); return false; } $transparency = 100 - $transparency; if ($transparency < 0 || $transparency > 100) { debug("transparency is out of range - image is not created!"); return false; } // Position x switch (($position-1) % 3) { case 0: $pos_x = 0; break; case 1: $pos_x = round(($infos_img[0] - $infos_wat[0]) / 2, 0); break; case 2: $pos_x = $infos_img[0] - $infos_wat[0]; break; } // Position y switch (floor(($position-1) / 3)) { case 0: $pos_y = 0; break; case 1: $pos_y = round(($infos_img[1] - $infos_wat[1]) / 2, 0); break; case 2: $pos_y = $infos_img[1] - $infos_wat[1]; break; } $img_image = $dst; $img_watermark = loadImage ($watermark, $infos_wat[2]); imagealphablending($img_image, true); imagealphablending($img_watermark, true); if ($t_x != -1) { imagecolortransparent($img_watermark, imagecolorat($img_watermark, $t_x, $t_y)); } imagecopymerge($img_image, $img_watermark, $pos_x, $pos_y, 0, 0, $infos_wat[0], $infos_wat[1], $transparency); return $img_image; } function generatecounterimage($filename) { global $comment_corner_size; global $cachedir; $counter_array = get_counter_data($filename); // returns 30 values (0 if none available!) $width = 138; $height = 70; $dst = ImageCreateTrueColor($width, $height); $white = imagecolorclosest ($dst, 255, 255, 255); $bar_color1 = imagecolorclosest ($dst, 140, 140, 140); $bar_color2 = imagecolorclosest ($dst, 190, 190, 190); $linecolor = imagecolorclosest ($dst, 0, 0, 0); imagefill($dst, 0, 0 , imagecolortransparent($dst, $white)); // draw the lines :) $maxvalue = 1; $max_height = 58; imageline($dst, 3, 67 , 132 , 67 , $linecolor); imageline($dst, 5, 5 , 5 , 70 , $linecolor); imageline($dst, 3, 67 - $max_height , 7 , 67 - $max_height , $linecolor); $counter_length = count($counter_array); for($i = 0;$i < $counter_length;$i++) { $y = $counter_array[$i]; if ($y > $maxvalue) { $maxvalue = $y; } } imagestring($dst, 1, 8 , 0 , $maxvalue , $linecolor); $factor = ($max_height-3) / $maxvalue; $x = 8; $tag_counter = date("w") + 4; // echo "