<?php

	$maxWidth = $_GET['width'];
	$maxHeight = $_GET['height'];
	$photo = $_GET['photo'];

	$color = '000000';
	$alpha = 100;
	$grey = 0;

	if(isset($_GET['color']) && isset($_GET['alpha'])){
		$color = $_GET['color'];
		$alpha = $_GET['alpha'];
	}
	if(isset($_GET['grey'])){
		$grey = $_GET['grey'];
	}

   function sendLastModified($imgname) {
      $lastModified = time();
      if (file_exists($imgname)) {
          clearstatcache();
          $lastModified = filemtime($imgname);
      }
      header('Last-Modified: ' . gmdate('D, d M Y H:i:s \G\M\T', $lastModified));
   }



   function sendResponsePrologue($imgname) {

        $modifiedSince = -1;

        $lastModified = time();

        if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {

            $modifiedSince = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);

        }

        if (file_exists($imgname)) {

            clearstatcache();

            $lastModified = filemtime($imgname);

        }

        if ($modifiedSince < $lastModified) {

            sendLastModified($imgname);

        } else {

            header('HTTP/1.1 304 Not Modified');

            exit;

        }

   }



   $imgname = $_SERVER['DOCUMENT_ROOT']."upload/min/".$maxWidth."_".$maxHeight."_".$color."_".$alpha."_".$grey."_".$photo;



	if(file_exists($imgname)){

      sendResponsePrologue($imgname);

		$check = @GetImageSize($imgname);

		$mime = $check[2];

		if ($mime=='2') {Header("Content-type: image/jpeg");}

		elseif ($mime=='1') {Header("Content-type: image/gif");}

		elseif ($mime=='3') {Header("Content-type: image/png");}

		else die("blad");

		readfile($imgname);

		exit;

    }



	function splitColor($color) {

	    $c = array();

	    $color = dechex(hexdec($color));

	    $color = explode("\n", trim(chunk_split($color, 2)));

	    foreach ($color as $i) {

	        $c[] = hexdec($i);

	    }

	    return $c;

	}



	function getProcessedImage($src, $color, $a) {

        $w = imagesx($src);

        $h = imagesy($src);

        imagealphablending($src, true);

        $dest = imagecreatetruecolor($w, $h);

        $c = splitColor($color);

        imagefill($dest, 0, 0, imagecolorallocate($dest, $c[0], $c[1], $c[2]));

        imagecopymerge($dest, $src, 0, 0, 0, 0, $w, $h, $a);

        return $dest;

   }







	//--- USTAWIENIA ZNAKU WODNEGO ---



		$watermarkType = 2;  		//  ustaw 1 dla watermarka w trybie GIF, 2 dla tekstu

		$watermarkPosition = 3; 	//  1 - lewy gorny rog, 2 - prawy gorny, 3 - prawy dolny, 4 - lewy dolny



		$opacity = 50;  			// 1 - 100 , przezroczystosc znaku wodnego



	//znacz tylko zdjecia powyzej tej szer/wys w pixelach

	//( LUB: 0 - zawsze znacz, -1 znacz kiedy znak mniejszy od miniaturki, -2 nigdy nie znacz)



		$minWidthToWatermark = 301;

		$minHeightToWatermark = 301;



	//ustawienia znaku wodnego, prosze dostosowac nazwe pliku i tekst



		if($watermarkType == 1){ $watermark = "images/logo.gif"; } else {

			$watermarkText = "MaszFana.pl";	//tresc znaku wodnego

			$watermarkSize = 3;  			//rozmiar napisu - wartosc od 1 do 5



			$watermarkColorR = 255;			//kolor napisu (0,0,0 = czarny)

			$watermarkColorG = 255;

			$watermarkColorB = 255;

		}



	// ----  KONIEC USTAWIEN -----



	$imgname = $_SERVER['DOCUMENT_ROOT']."upload/$photo";

	// koniec 1. fragmentu



	$check = @GetImageSize($imgname);

	$width = $check[0]; 	// szeroko&#182;ć obrazka

	$height = $check[1]; 	// wysoko&#182;ć obrazka

	$mime = $check[2]; 		// rodzaj obrazka



	if($height == 0) die("");



	if( $maxWidth < $width || $maxHeight < $height) {

		if( $maxWidth / $width  < $maxHeight / $height ) {

			$x_scale = $maxWidth;

			$factor = $width/$height;

			$y_scale= @floor($x_scale/$factor);

		}else {

			$y_scale = $maxHeight;

			$factor = $height/$width;

			$x_scale = @floor($y_scale/$factor);

		}

	}	else {

		$x_scale = $width;

		$y_scale = $height;

	}



	switch($mime){

		case 1:

			$im = @ImageCreateFromGif($imgname);

			break;

		case 2:

			$im = @ImageCreateFromJpeg($imgname);

			break;

		case 3:

			$im = @ImageCreateFromPng($imgname);

			break;

		default:

			$im = false;

			break;

	}



	// zamieniamy grafikę na kolory w skali szarosci
	if($grey)imagefilter($im, IMG_FILTER_GRAYSCALE);


	if (!$im) { // je&#182;li nie istnieje zmienna $im

		$im = ImageCreate(100, 100);

		$bgc = ImageColorAllocate ($im, 255, 255, 255);

		$tc = ImageColorAllocate ($im, 0, 0, 0);

		ImageString($im, 1, 2, 2, "Blad: $imgname", $tc);

		ImageString($im, 1, 2, 15, "Brak pliku!", $tc);

	}



	//pomniejszanie zdjęcia

	$thumb = ImageCreateTrueColor($x_scale,$y_scale);

	ImageAlphaBlending($thumb, true);













	// skopiuj i pomniejsz (wygład&#317;) obrazek do zmiennej $thumb

	ImageCopyResampled($thumb, $im, 0, 0, 0, 0, $x_scale, $y_scale, $width, $height);



    // ustawianie koloru tła i poziomu przezroczysto&#182;ci grafiki

	$thumb = getProcessedImage($thumb, $color, $alpha);





	//wklejanie znaku wodnego:



	if($minWidthToWatermark != -2 && $minHeightToWatermark != -2) {

		if($watermarkType == 1) {

				$watermarkImage = ImageCreateFromGif($watermark);

		} else {

			$watermarkImage = ImageCreate((int)(8.5*strlen($watermarkText)), 20);

			$bgc = ImageColorAllocate ($watermarkImage, 255, 255, 255);

		}

	}



	if( ( $minWidthToWatermark == 0 && $minHeightToWatermark == 0 )   ||

		( $minWidthToWatermark != -1 && $x_scale > $minWidthToWatermark && $y_scale > $minHeightToWatermark ) ||

		( $minWidthToWatermark == -1 && $minHeightToWatermark == -1  &&

			(imageSX($watermarkImage) < $x_scale) && (imageSY($watermarkImage) < $y_scale) )

	   ) //warunek znaczenia miniaturki

	{

		switch($watermarkPosition) {

			case 1:

				$posX = 0;

				$posY = 0;

				break;

			case 2:

				$posX = $x_scale - imageSX($watermarkImage);

				$posY = 0;

				break;

			case 3:

				$posX = $x_scale - imageSX($watermarkImage);

				$posY = $y_scale - imageSY($watermarkImage);

				break;

			case 4:

				$posX = 0;

				$posY = $y_scale - imageSY($watermarkImage);

				break;

			default:

				$posX = 0;

				$posY = 0;

				break;

		}



		if($watermarkType == 1) { //gif

				ImageCopyMerge($thumb, $watermarkImage, $posX ,$posY,0,0, imageSX($watermarkImage),imageSY($watermarkImage), $opacity);

		}else { //tekst

			$textColor = ImageColorAllocate ($watermarkImage, $watermarkColorR, $watermarkColorG, $watermarkColorB);

			ImageString($watermarkImage, $watermarkSize, 2, 2, $watermarkText, $textColor); // wypisz komunikat

			imageColorTransparent ( $watermarkImage, $bgc);

			ImageCopyMerge($thumb, $watermarkImage, $posX ,$posY,0,0, imageSX($watermarkImage),imageSY($watermarkImage), $opacity);

		}

	}









	// UWAGA: ponizszy fragment to moja 2. ingerencja - w porownaniu z wczesniejsza wersja skryptu najpierw zapisuje on przetworzony juz plik na serwerze, a dopiero po tym wysyla go uzytkownikowi



    $imgname = $_SERVER['DOCUMENT_ROOT']."upload/min/".$maxWidth."_".$maxHeight."_".$color."_".$alpha."_".$grey."_".$photo;





	//-------- WY&#166;WIETLENIE MINIATURKI ----------

	if($mime=='2'){							// Je&#182;li rozszerzenie obrazka to JPEG

		ImageJPEG($thumb, "$imgname", 80);

		Header("Content-type: image/jpeg"); 		// wy&#182;lij nagłówek JPEGa

	} elseif ($mime=='1') {						// Je&#182;li rozszerzenie obrazka to GIF

		ImageGIF($thumb, "$imgname");

		Header("Content-type: image/gif"); 			// wy&#182;lij nagłówek GIFa

	} elseif ($mime=='3') {

		ImagePNG($thumb, "$imgname");

		Header("Content-type: image/png");

	}

	else // w przeciwnym wypadku

		die("blad");



    // Wysyłanie nagłówka Last-Modified
   sendLastModified($imgname);

	readfile($imgname);



	// koniec 2. fragmentu



	@imagedestroy($thumb);

	@imagedestroy($im);

	@imagedestroy($watermarkImage);

?>