nette image – špatné rozměry

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Paradiso
Člen | 101
+
0
-

Ahoj, stále nemohu vyřešit problém s importem obrázků.

Mám vzdálené obrázky např.: www.example.cz/…ejakyobr.jpg

a potřebuji je naimportovat k sobě

v cyklu mi jede:

$mlPhoto->path = array('www.example.cz/img/nejakyobr.jpg', 'www.example.cz/img/nejakyobr2.jpg',...)

                            $explodetPath = explode('/', $mlPhoto->path);
                            $file = end($explodetPath);

                            // fullview image //
                            if(!file_exists($fileDir . '/product/fullview/' . $mlPhoto->product_id)){
                                mkdir($fileDir . '/product/fullview/' . $mlPhoto->product_id, 0700 );//vytvorení složky
                                chmod($fileDir . '/product/fullview/' . $mlPhoto->product_id, 0777 ); //nastaveni atributu
                            }
                            $image = Image::fromFile($mlPhoto->path);
                            $image->resize((int)$productImages['fullview']['width'], (int)$productImages['fullview']['height'], Image::SHRINK_ONLY);
                            $image->save($fileDir . '/product/fullview/' . $mlPhoto->product_id .'/' . $file );
                            unset($image);

                            // detailMain image //
                            if(!file_exists($fileDir . '/product/detailMain/' . $mlPhoto->product_id)){
                                mkdir($fileDir . '/product/detailMain/' . $mlPhoto->product_id, 0700 );//vytvorení složky
                                chmod($fileDir . '/product/detailMain/' . $mlPhoto->product_id, 0777 ); //nastaveni atributu
                            }
                            $image2 = Image::fromFile($mlPhoto->path);
                            $image2->resize((int)$productImages['detailMain']['width'], (int)$productImages['detailMain']['height'], Image::SHRINK_ONLY|Image::FIT);
                            $image2->save($fileDir . '/product/detailMain/' . $mlPhoto->product_id .'/' . $file );
                            unset($image2);

productImages obsahuje konfiguraci:

		productImages: # nastavení obrázků

			# Plné zobrazení
			fullview:
				height: 800
				width: 1200

			# Detail produktu hlavní
			detailMain:
				height: 285
				width: 325

Vše funguje dobře, ale občas to vytvoří úplné jiné rozměry, kde šířka je 300px (takovou šířku vůbec nikde nemám a ani nemá stahovaný obrázek). Čím by to mohlo být? Vstup jsem kontroloval, je správný. Navíc, pokud zkusím import znovu, stane se to zase u jiných obrázků než před tím.

Mockrát díky za veškeré rady.

Editoval Paradiso (24. 4. 2013 21:07)

Majkl578
Moderator | 1364
+
0
-

Který z nich nefunguje, fullview nebo detailMain? Můžeš odkázat na obrázek, který dělá problémy? Nesedící šířka může být použitím Image::FIT, což zachovává poměr stran a zmenší obrázek tak, aby se vešel do zadaných rozměrů.

Paradiso
Člen | 101
+
0
-

originál: http://www.mlsport.cz/…nax-xp-1.jpg

http://www.uplavala.cz/…nax-xp-1.jpg
http://www.uplavala.cz/…nax-xp-1.jpg

Pak se dělají ještě 2 menší a ty sedí, jsou v kódu až po těchto dvou

Nejprve jsem myslel, jestli nezůstává v proměnné $image nějaká nežádaná hodnota, ale ani unset nepomohlo

Paradiso
Člen | 101
+
0
-

Tak už jsem to vyřešil. Je to v tom tahání z externího zdroje.
Využil jsem HosipLanovo cURL wrapper

stáhl jsem si obrázky nejprve na hosting a teprve pak jsem je upravoval

nějak takto:

                            $request = new \Kdyby\Curl\Request($mlPhoto->path);
                            $request->method = \Kdyby\Curl\Request::DOWNLOAD;
                            $response = $this->context->curlSender->send($request);

                            $response->move($tmpFile);

//kód z předešlého postu...