Autor Zpráva
kubijo
Profil *
Krásný den všem. Svépomocí a pomocí širého internetu sem si přetvořil jeden skript, tak že ho používám na změnu velikosti fotek.

Na novém webu který teď páchám ho používám k instalaci databáze, způsobem takovým, že čtu jeden po druhém soubory ze složky s fotkami a po každém si zavolám tento skript pro zmenšení (jednou pro každý soubor na náhled a pote na velkou verzi fotky).

Vše funguje jak má, až na ten detail, že při použití metody resample skript skousne asi 10 fotek a při použití pouhého resize asi 56 (zatím zkoušeno na localhostu a na ic.cz).

Jde mi tedy o to, jak se dělají tyto skripty tak, že klidně schroustají třeba 200 obrazů?? Děkuji velice za rady, či případné nasměrování na sofistikovanější způsob



zde je soubor get_image.php:

<?php
require_once"include/bmp.php";
 
//zjisteni pripony souboru
$obrazek_jmeno_n = explode(".", basename( $jmeno )); // rozdeli priponu a nazev souboru do pole
$obrazek_pripona = StrToLower ($obrazek_jmeno_n[1]); // pripona obrazku

// Get new dimensions
list($width, $height) = getimagesize($filename);
if ($width<$height){ //pomer stran musi byt vzdy mensi nez 1!
	$pomer_stran=$width/$height; //pokud je vetsi vyska, tak se zada a mensi sirka se dopocita
	$new_height=$max_vyska;
	$new_width=$max_vyska*$pomer_stran;
}
elseif ($width>$height){ //pokud je vetsi sirka, tak se zada a mensi vyska se dopocita
	$pomer_stran=$height/$width;
	$new_width=$max_sirka;
	$new_height=$max_sirka*$pomer_stran;
}

// Resample
$image_p = imagecreatetruecolor($new_width, $new_height);

if($obrazek_pripona=="jpeg" or $obrazek_pripona=="jpg"){
	$image = imagecreatefromjpeg($filename);
	$mime_typ = "image/jpeg";
	}
elseif($obrazek_pripona=="gif"){
	$image = imagecreatefromgif($filename);
	$mime_typ = "image/gif";
	}
elseif($obrazek_pripona=="png"){
	$image = imagecreatefrompng($filename);
	$mime_typ = "image/png";
	}
elseif($obrazek_pripona=="bmp"){
	$image = imagecreatefrombmp($filename);
	$mime_typ = "image/jpeg";
	}

if($resample==1){
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
}
else{
imagecopyresized($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
}

$vystupni_cesta = strtolower($cesta_ulozit.$prefix.$jmeno);

if($obrazek_pripona=="jpeg" or $obrazek_pripona=="jpg"):
	imagejpeg($image_p, $vystupni_cesta, 100);
elseif($obrazek_pripona=="gif"):
	imagegif($image_p, $vystupni_cesta, 100);
elseif($obrazek_pripona=="png"):
	imagepng($image_p, $vystupni_cesta, 0);
elseif($obrazek_pripona=="bmp"):
	imagebmp($image_p, $vystupni_cesta);
endif;

imagedestroy($image);
imagedestroy($image_p);
?>



a zde je soubor, který ho volá:
$cislo=1;
					while($soubor=$slozka->read()) /* precte soubory ve slozce */:
					  if ($soubor=="." || $soubor=="..") continue; // vylouci stejny a nadrazeny adresar 
					$soubor_n = explode(".", basename( $soubor )); // rozdeli priponu a nazev souboru do pole
					$pripona = $soubor_n[1]; // pripona souboru
					$nazev = $soubor_n[0]; // nazev souboru
					
					//vypis pouze obrazku
					// vsechny mozne pripony obrazku pro pozadi
					$pole_pripon=array('png','bmp','gif','jpg','jpeg','PNG','BMP','GIF','JPG','JPEG');
						foreach($pole_pripon as $pripona_z) // prohledani pole pripon
						{
					// kontrola souboru jestli je soubor obrazek (podle pripony), pokud ano vypis
							if ($pripona==$pripona_z){
					
					//ulozeni full
					
					$filename=$cesta.$soubor;
					$jmeno=$cislo.".".$pripona;
					$max_sirka="900";
					$max_vyska="900";
					$cesta_ulozit="../galerie/".$slozka_upload."full/";
					$prefix="";
					$resample=0;
					
					include "get_image.php";
					
					//ulozeni nahledu
					
					$filename=$cesta.$soubor;
					$jmeno=$cislo.".".$pripona;
					$max_sirka="100";
					$max_vyska="100";
					$cesta_ulozit="../galerie/".$slozka_upload;
					$prefix="";
					$resample=0;
					
					include "get_image.php";
					  }
					 }
					 
					$cislo=$cislo+1;
					endwhile;
					$slozka->close(); // zavre slozku
MCKAY
Profil
Hele, jestli chceš, a jestli jsem správně pochopil dotaz, napiš mi na 483*104*828 icq, nebo jabber X-Ray@jabbim.cz a možná se ti pokusím pomoci. Řeším podobný problém.
Nox
Profil
kubijo
Mohlo by se to řešit reloadováním, každopádně tkaová věc je podle mě lepší řešit nějakým programem, třeba XnView
kubijo
Profil *
Nox
no jo, takhle uz mam galerii taky udelanou, ale tohle delam jako administraci pro cloveka neznaleho
kubijo
Profil *
napada me, ze v php musi bejt nejaka cesta, jak davkove zpracovat takhle velkej objem dat i se zpusobem resample kterej je dost narocnej na vykon

protoze co ja vím jak to je delany, ale kamos si nechal nekde delat php galerii s administraci a jen tak ze zvedavosti sem se ptal kolik to skousne fotek a on blekotal cosi o dosti velkých cislech a kdyz se veme kvalita resized() metody, tak to s profesionalnim vzhledem nema moc spolecneho :-(
kubijo
Profil *
to tohle téma opravdu tak rychle umřelo???
Jan Tvrdík
Profil
kubijo:
Zpracování většího počtu obrázku je v php nereálné, protože je to časově náročná operace. Můžeš si udělat skript, který vždy zmenší jeden obrázek a následně se znovu načte, takže nedojde k překročení maximální doby běhu skriptu, ale stejně to půjde pomalu.
DoubleThink
Profil *
Větší fotobanky používají (pravděpodobně) externí aplikace - CGI nebo úplně nezávisle běžící na pozadí, které fotky zpracují dávkově. Oblíbený je ImageMagick.
kubijo
Profil *
Jan Tvrdík
no tak neco mozna v tom smyslu sem myslel, ale bohuzel nevim, jak to realizovat

DoubleThink
díky, to mě nenapadlo :-), ImageMagick skouknu.
Kajman_
Profil *
Třeba pomůže alespoň trošku
http://cz2.php.net/manual/en/function.set-time-limit.php

Případně resamplování provádět až, když je obrázek poprvé potřeba.
kubijo
Profil *
Nicméně postupné zpracování třeba po 30 fotkach by slo taky, pokud by se nepouzil resample. pak by skript mohl zvladnout teoreticky jakekoliv mnozstvi fotek.




ja to tedka asi udelam tak ze cloveku co to bude obsluhovat ukazu jak resamplovat fotky na maximalni velikost, ktera se pouzije na webu a zmensovat budu jen nahledy metodou resize, takze by to melo teoreticky zvladnout mnohem vice (velky to jen skopiruje a nahledy byly vzdycky rychlejc)
kubijo
Profil *
Kajman_
dík za myšlenku, zařadím :-)
kubijo
Profil *
tak ImageMagick. sice vypadá jako geniální nastroj, ale jeho instalace na apache2triad mě jedině dohání zešílení
kubijo
Profil *
Takže po vyzkoušení asi 5 různých ,,one-click'' přednastavených serverů s php a po dni stráveném nastavováním vlastní sestavy php, mysql, apache (neúspěšně) shledávám instalaci image-magick nemožnou.


Nicméně děkuji všem zúčastněným za rady a pokud by někdo věděl ještě o nějaké aplikaci, která by se vyskytovala na českých hostingových serverech (jinak by to bylo asi k ničemu ze), tak prosím o nápovědu. Děkuji.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: