obróbka grafiki - tworzenie miniatur

0

Tworze galerie zdjęć na stronke, i mam problem - nie chce generować mi miniatur, czy ktoś ma jakieś pomysły co jest nie tak w skrypcie?

Przykładowe wywołanie:

thumb.display.php?max=800&q=90&img=sciezka/do/pliku/plik.png

	//// debug mode
	$th_debug_flag = false;//$settings['thumbnail_debug'];
	
	$error_msg = '';
	$center_image = true;
	
	$img_types = array(
		"",
		"GIF",
		"JPG",
		"PNG",
		"SWF",
		"PSD",
		"BMP",
		"TIFF",
		"TIFF",
		"JPC",
		"JP2",
		"JPX",
		"JB2",
		"SWC",
		"IFF",
		"WBMP",
		"XBM"
	);
	
	// debug
	$th_debug = (isset($settings['thumbnail_debug']))
		? $settings['thumbnail_debug']
		: false;
	
	// check if image path is encoded
	$en = (isset($_GET["en"]))
		? true
		: false;
	
	//// receives the original image as [?img=relative/path/to/image.jpg] ////
	// get image path
	$img = false;
	if (isset($_GET["img"])) {
		if ($settings['set_double_encoding']) {
			$img = "../".Url_decode(htmlentities($_GET["img"]));
		} else {
			$img = "../".str_replace("\\","",htmlentities($_GET["img"]));
		}
	} else {
		$img = false;
	}

	// check if big image to cache
	$pic = (isset($_GET["pic"]))
		? true
		: false;
	
	$_prefix = ($pic)
		? $settings['image_prefix']
		: $settings['thumbnail_prefix'];
	
	// image is square?
	$sq = (isset($_GET["sq"]))
		? htmlentities($_GET["sq"])
		: false;
	
	// image is preview thumbnail
	$pr = (isset($_GET["pr"]))
		? htmlentities($_GET["pr"])
		: false;
	
	// image max size
	$img_maxsize = (isset($_GET["max"])) ? htmlentities($_GET["max"]) : 80;
	
	// image quality
	$img_quality = (isset($_GET["q"]))
		? htmlentities($_GET["q"])
		: (($sq)
			? (($pr)
				? $settings['preview_thumbnail_quality']
				: $settings['thumbnail_quality'])
			: $settings['thumbnail_quality']);
	
	// cache thumbnail
	$cache_thumb = (isset($_GET["c"]))
		? true
		: false;
	
	// delete existing thumbnail
	$unlink = (isset($_GET["u"]))
		? true
		: false;
	
	$thumb = '';	
	$image = '';
	
	if ($img && file_exists($img)) {
		
		//// get image size ////
		$img_info = getimagesize($img);
		
		if ($img_info) {
			
			//// resize image ////
			$img_type = $img_types[$img_info[2]];
			$th_w = $img_info[0];
			$th_h = $img_info[1];
			$move_w = $move_h = 0;
			$w = $h = 0;
			
			if ($th_w >= $th_h) {
				
				//// Landscape Picture ////
				if ($sq) {
					$h = $img_maxsize;
					$w = (($th_w * $h) / $th_h);
					$move_w = (($th_w - $th_h) / 2);
					$w = $img_maxsize;
					$th_w = $th_h;
				} else {
					$w = $img_maxsize;
					$h = (($th_h * $w) / $th_w);
				}
				
			} else {
				
				//// Portrait Picture ////
				if ($sq) {
					$w = $img_maxsize;
					$h = (($th_h * $w) / $th_w);
					$move_h = (($th_h - $th_w) / 2);
					$h = $img_maxsize;
					$th_h = $th_w;
				} else {
					$h = $img_maxsize;
					$w = (($th_w * $h) / $th_h);
				}
			}
			
			//// create image ////
			$thumb = imagecreatetruecolor($w, $h);
			imagefill($thumb, 255, 255, 255);
			
			//// copy image ////
			if (($img_type == "JPG") && (imagetypes() & IMG_JPG)) {
				$image = imagecreatefromjpeg($img);
				
			} else if (($img_type == "GIF") && (imagetypes() & IMG_GIF)) {
				$image = imagecreatefromgif($img);
				
			} else if (($img_type == "PNG") && (imagetypes() & IMG_PNG)) {
				$image = imagecreatefrompng($img);
				
			}
		} else {
			$error_msg = "!! BAD IMG";
		}
	}
	
	//// if there's an error reading the original image
	//// output an error image
	// see if it failed
	if (!$th_debug_flag && (!$image | $image=='' | $error_msg!='')) {
		
		// do not cache
		$cache_thumb = '';
		$error_size = $img_maxsize;
		// create a white image
		$thumb  = imagecreatetruecolor($error_size, $error_size);
		$lightgrey = imagecolorallocate($thumb, 234, 234, 234);
		$grey = imagecolorallocate($thumb, 66, 66, 66);
		$black  = imagecolorallocate($thumb, 0, 0, 0);
		$white  = imagecolorallocate($thumb, 255, 255, 255);
		$orange  = imagecolorallocate($thumb, 255, 66, 0);
		$bg_color = $grey;
		$fg_color = $white;
		imagefilledrectangle($thumb, 0, 0, $error_size, $error_size, $bg_color);
			
		// output an errmsg
		$fnum = ($img_maxsize >= 70) ? 2 : 1;
		$msg_height = 12;
		$msg_array = explode(":",$error_msg);
		for ($i=0; $i<count($msg_array); $i++) {
			imagestring($thumb, $fnum, 2, 2+($msg_height*$i), $msg_array[$i], $fg_color);
		}
	
		/// up the image quality
		$img_quality = 100;
		
	} else {
		$created = imagecopyresampled($thumb, $image, 0, 0, $move_w, $move_h, $w, $h, $th_w, $th_h);
		
	}
	
	//// cache images (if enabled)
	$current_gallery = array_pop(split("/", dirname($img)));
	$cache_thumb_dir = "../cache/"
		.$settings['gallery_prefix']
		.$current_gallery;
		
	$thumb_url = $cache_thumb_dir."/"
		.$_prefix
		.basename($img);
		
	if ($unlink) $delete = @unlink($thumb_url);
	
	if ($cache_thumb) {
		$thumbCreated = imagejpeg($thumb, $thumb_url, $img_quality);
	}
	
	//// display created image ////
	header("Content-type: image/jpeg");
	imagejpeg($thumb, '', $img_quality);
	
	//// destroy images (free memory)
	imagedestroy($image);
	imagedestroy($thumb);
	
	/* END */
?>
0

Widać, że to nie twój kod. Pierwsze co zrobiłem to sprawdziłem jaką ścieżkę pobrał mi do pliku i..... zrobił ../moj_plik.jpg.
Ergo - kieruje do katalogu wyższego, więc trzeba usunąć kropki.

        //// receives the original image as [?img=relative/path/to/image.jpg] ////
        // get image path
        $img = false;
        if (isset($_GET["img"])) {
                if ($settings['set_double_encoding']) {
                        $img = Url_decode(htmlentities($_GET["img"]));      // bez "../".
                } else {
                        $img = str_replace("\\","",htmlentities($_GET["img"]));      // bez "../".
                }
        } else {
                $img = false;
        }
0

plik znajduje sie w katalogu biblioteki ktory jest równorzędny z katalogiem galerie więc żeby pobrać obrazek musi wyjsc z jednego katalogu i wejsc do drugiego, sciezka jest prawidlowa a mimo to nie generuje miniaturek.

kod całościowe nie jest mój ale swoje tam też wiem... jakieś inne pomysły dlaczego nie chce zmniejszyć obrazka?

0

Jeszcze jakieś pomysły co do rozwiązania problemu?

0

Tak, naucz się debugować.

Wywal te linijki:

header("Content-type: image/jpeg");
imagejpeg($thumb, '', $img_quality);

Zrób sobie co parę linijek coś w stylu:

echo "Spodziewana wartość: 640, wyliczona wartość: $nazwa_zmiennej <br />";

oraz rzeczy typu:

if (jakis_warunek) {
  echo "if numer 1 się spełnił";
  // reszta instrukcji
}
else {
  echo "if numer 1 nie spełniony";
  // reszta instrukcji
}

itd.

W ten sposób będziesz krok po kroku śledził co się dzieje w Twoim kodzie, i w którym miejscu coś nie zadziałało tak, jak trzeba. Oczywiście testuj na znanym sobie obrazku, na którym wiesz, jaki będzie wynik działania.

Jeżeli oczekiwałeś konkretniejszej odpowiedzi to niestety - kod jest na tyle długi (bo nie sprawdzałeś, który fragment nawala, tylko skopiowałeś całość jak leci) i pytanie na tyle nieciekawe ("nie działa"), że za Ciebie tego nie zrobię. A ty się czegoś nauczysz na przyszłość. Powodzenia!

0

Dzięki za odpowiedź, na podobnej zasadzie działałem i niby wszystko jest ok, już troszkę tutaj piszę więc mogłeś zauważyć że zazwyczaj wszystko mam przeanalizowane, tutaj moim problemem jest fakt że biblioteka gd nie jest mi jakość szczególnie znana - dopiero się uczę (dlatego też z gotowca korzystam)
w sumie obrazek się w skrypcie 'generuje' przegladarka pokazuje kwadracik z krzyżykiem (znaczek że obrazka nie ma) byłbym wdzięczny za jakieś konkretniejsze wskazówki co może być nie tak?

0

wywal header i imagejpeg - zapewne pojawi się jakieś ostrzeżenie. wyeliminuj to ostrzeżenie, gdyż jest produkowane razem z obrazkiem, dlatego jest uszkodzony.

1 użytkowników online, w tym zalogowanych: 0, gości: 1