Zmenšování obrázků pomocí třídy Image\Nette

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
KillPrd
Začátečník | 110
+
0
-

Ahojte rád bych udělal velmi jednoduchou galerii a nějakým zpusobem bych chtěl zmenšit obrázky pro náhledy.

snařil jsem se to řešit následovně pomocí třídy Image:

$idecka = $this->model->findAllTodoss("[id]","[galerie]","[s_inzerce] = '".$this->params['id']."'");

			foreach($idecka as $id)
			{
				$image = Image::fromFile(WWW_DIR.'files/file/'.$id.'.dat');
				$image->resize(150, 100);
				$image->send();
				$this->template->images = $image;
			}


		}

Ale asi jsem trošku nepochopil jak se to má přesně dělat.
Vím že mi chybí uložení obrázku ale na to už jsem asi krátkej tak bych prosil o velmi jednoduché vysvětlení nebo ukázku nebo upravu tohoto kodu moc děkuji…

Daniel Kessl
Člen | 6
+
0
-

K uložení obrázku slouží metoda $image->save($filename = null, $quality = null, $type = null), přesně jak je popsáno v dokumentaci. $image->send() obrázek pošle na výstup.

KillPrd
Začátečník | 110
+
0
-

Daniel Kessl napsal(a):

K uložení obrázku slouží metoda $image->save($filename = null, $quality = null, $type = null), přesně jak je popsáno v dokumentaci. $image->send() obrázek pošle na výstup.

To je hezke ale asi to neni dostatečne popsane protoze stale nevim jak t opouzit v presenteru a jak v sablone

Daniel Kessl
Člen | 6
+
0
-

Presenter

<?php
foreach ($ids as $id) {
	$image = Image::fromFile('nekde/' . $id . '.typ');
	$image->resize(150, 100);
	$image->save($path = 'nekde/' . $id . '.thumbnail.typ');

	$this->template->images[] = $path;
}
?>

Šablona

{foreach $images as $image}
	<img src="{$image}" />
{/foreach}

Stačí?

KillPrd
Začátečník | 110
+
0
-

To je naprosto super moc dekuji ted aspon znám princip.A abych se přiznal v této fázy jsem také již byl ale nefunguje to chybová hláška je:Object of class Todo could not be converted to string
evidentně mu vadí tato část kodu

$image = Image::fromFile('files/file/' . $id . '.jpg');
redhead
Člen | 1313
+
0
-

No a co máš v proměnné $id? Něco mi říká (ano, ta chybová hláška!), že to skutečně není žádné id ale objekt třídy Todo.

KillPrd
Začátečník | 110
+
0
-

No asi moje chyba asi to nevraci dobre udaje nicmene pokud si vytvrorim zkušebni array pole s idackama ktere vim ze existuji prozmenu mi to pise:The variable ‚images‘ does not exist in template.
tak sem z toho jelen

KillPrd
Začátečník | 110
+
0
-

Tak je tu ještě jeden problém v řádku $this->template->images []= $path;
jakmile ho zmenim na $this->template->images = array($path);
tak se jedna fotka zobrazí ale jinak to nefunguje :-(

redhead
Člen | 1313
+
0
-

A opsal si ten příklad od Daniela správně? Plní pole $this->template->images. A pak ho prochází v šabloně.

KillPrd
Začátečník | 110
+
0
-
<?php
$items = $this->model->findAllTodos($order = array(
					'id' => 'ASC',
				), $where = array(
					'id' =>  $this->params['id'],
				), $offset = NULL, $limit = NULL
				,$tabulky = 'galerie');


			foreach ($items as $ide) {

				$file = 'files/file/' . $ide . '.jpg';
				$image = Image::fromFile($file);
				$image->resize(150, 100);
				$safeFile = 'files/file/' . $ide . '.thumbnail.jpg';
				$image->save($path = $safeFile);

				$this->template->images[] = $path;
			}

<?

šablona

{foreach $images as $img}

	<div class="img">
    	<a href="3" rel="lightbox" target="_blank">
        	 <img src="{$basePath}/{$img}" />
         </a>
    </div>
{/foreach}
Daniel Kessl
Člen | 6
+
0
-

Nepomohlo by to pole ještě před foreach cyklem inicializovat? ($this->template->images = array();)

Daniel Kessl
Člen | 6
+
0
-

Btw, k čemu ti je proměnná $safeFile? Dej to rovnou do $path a máš o proměnnou míň.

KillPrd
Začátečník | 110
+
0
-

Daniel Kessl napsal(a):

Nepomohlo by to pole ještě před foreach cyklem inicializovat? ($this->template->images = array();)

No tak nepomohlo ale jedna zmena je už to nepíše chybovku :Undefined variable: images;
Leč se nezobrazí ani jeden obrázek :-(

redhead
Člen | 1313
+
0
-

Nikde tam nevidím WWW_DIR. Bůh ví, kam to ukládáš.

KillPrd
Začátečník | 110
+
0
-

Aktuálně:

<?php

			$items = $this->model->findAllTodos($order = array(
					'id' => 'ASC',
				), $where = array(
					'id' =>  $this->params['id'],
				), $offset = NULL, $limit = NULL
				,$tabulky = 'galerie');


			foreach ($items as $ide) {

				$image = Image::fromFile(WWW_DIR.'/files/file/' . $ide . '.dat');
				$image->resize(150, 100);
				$image->save($path = WWW_DIR.'/files/file/' . $ide . '.thumbnail.jpg');



				$this->template->images[] =$path;
			}
?>

a stále stejná chybová hláška.Undefined variable: images

redhead
Člen | 1313
+
0
-

Tak to zkus plnit do localního pole a pak to setuj do šablony:

$images = array();
foreach(...) {
...
	$images[] = $path;
...
}
$this->template->images = $images;
KillPrd
Začátečník | 110
+
0
-

problem je v dotazu který používám díky tomu se neplní pole ted už jen správně udělat dotaz… Děkuji všm za trpělivost a podporu

posledni funkční kod

<?php
$obra = array();
			foreach ($items as $ide) {
			$path = WWW_DIR.'/files/file/' .$ide . '.thumbnail.jpg';
			$image = Image::fromFile(WWW_DIR.'/files/file/' . $ide . '.dat');
			$image->resize(150, 100);
			$image->save($path);


			$obra[] =$path;
			}
			$this->template->images = $obra;
?>
Ondřej Mirtes
Člen | 1536
+
0
-

Nový radvis?