Problém s nahráním obrázku jpg některé nahrá a některé ne
- parti
- Člen | 117
Dobrý dne prosím o radu můj problém je ten že mi některé obrázky (.jpg) v adminovy nechce nahrat. Nekteré obrázky jpg. nahraje a některé ne a velikosti to není pořád mají méně než 5MB. Prosím o radu nevíte čím to je ?
Presenter
namespace App\AdminModule\Presenter;
use Nette\Application\UI\Form;
use App\Model\ImageStorage;
use Nette\Utils\FileSystem;
use Nette\Utils\Image;
/**
* Description of PhotosPresenter
*
* @author parti
*/
class PhotosPresenter extends SecurePresenter {
/**
*
* @var \App\Model\PhotoManager
*/
private $photoManager;
public function __construct(\App\Model\PhotoManager $pm) {
parent::__construct();
$this->photoManager = $pm;
}
/**
* vypisujeme galerie
*/
public function actionGalleries() {
$this->template->galleries = $this->photoManager->getGalleries();
}
/**
*
* @param int $id
*/
public function actionGallery($id = NULL) {
$row = $this->photoManager->getGallery($id)->fetch();
$defaults = [];
$defaults['title'] = $row['nazev'];
$defaults['description'] = $row['popis'];
$defaults['types'] = $row['typ'];
$defaults['id'] = $row['id'];
$this['galleryForm']->setDefaults($defaults);
$this->template->photos = $this->photoManager->getPhotos($row['id']);
}
public function createComponentGalleryForm() {
$form = new Form;
$types = [];
$types['svatba'] = 'Svatby';
$types['prilezitost'] = 'K Přilezitosti';
$types['pohreb'] = 'Pohřby';
$form->addSelect('types', NULL, $types)
->setPrompt(' - - zvolte typ')
->setRequired('Zvolte prosim typ');
$form->addText('title')
->setRequired('Zvolte nazev fotogalerie');
$form->addTextArea('description');
$form->addUpload('photos', NULL, TRUE)
->addRule(Form::IMAGE, 'Zvolte obrázek typu JPEG, PNG nebo GIF')
->addRule(Form::MAX_FILE_SIZE, 'Obrázek je moc veliký ma 5MB', 5 * 1000 * 1024);
$form->addSubmit('save');
$form->onSuccess[] = array($this, 'galleryFormSubmitted');
$form->addHidden('id');
return $form;
}
public function galleryFormSubmitted(Form $form){
$values = $form->values;
// ulozime zaznam o galerii a teprve pak nahrajeme fotky
$data = [];
$data['typ'] = $values['types'];
$data['nazev'] = $values['title'];
$data['popis'] = $values['description'];
$data['casVytvoreni'] = new \Nette\Utils\DateTime;
$galleryId = $this->photoManager->saveGallery($data, $values['id']);
// vytvorime adresar a podadresar (podle aktualniho data)
$now = new \Nette\Utils\DateTime;
$year = $now->format('Y');
$month = $now->format('m');
$folder = 'fotky/' . $year . '/' . $month;
FileSystem::createDir($folder);
// projdeme nahravane soubory fotek
foreach ($values['photos'] as $photo) {
// upravime fotku podle sve vule
$image = $photo->toImage();
$image->resize(800, NULL, Image::SHRINK_ONLY);
// ulozime do spravneho adresare
$image->save($folder . '/' . $photo->sanitizedName);
// ulozime do DB
$data = [];
$data ['rok'] = $year;
$data ['mesic'] = $month;
$data['soubor'] = $photo->sanitizedName;
$data ['galerie_id'] = $galleryId;
$this->photoManager->createImage($data);
}
// mazat vybrane fotky
$deletePhotos = isset($form->getHttpData()['deletePhotos']) ? $form->getHttpData()['deletePhotos'] : [];
$this->photoManager->deletePhotos($deletePhotos);
$this->flashMessage('OK', 'success');
$this->redirect('this');
exit;
}
<form n:name=galleryForm>
<p>
<label class="control-label" >Zvolte typ</label>
<select n:name=types class="form-control"></select>
</p>
<p>
<label class="control-label" >Nazev</label>
<input n:name=title class="form-control">
</p>
<p>
<label class="control-label" >Text</label>
<textarea n:name=description class="form-control"> </textarea>
</p>
<p n:if=$photos>
{foreach $photos as $photo}
<div class="img-thumbnail">
<img src="{$basePath . '/fotky/' . $photo->rok . '/' . $photo->mesic . '/' . $photo->soubor}" width="150" />
<br />
<label>smazat <input type="checkbox" name="deletePhotos[]" value="{$photo->id}" /></label>
</div>
{/foreach}
</p>
<p>
<input n:name=photos />
</p>
<p>
<input n:name=save class="btn btn-success" value="ulozit">
<a class="btn btn-primary" n:href="Photos:galleries">Zpet na výpis gallerie</a>
</p>
<input n:name=id>
</form>
Dekuji za radu a pomoc
- CZechBoY
- Člen | 3608
Jakou dostaneš chybu?
http://php.net/…d.errors.php
Případně kam až se dostaneš při zpracování souboru?
Editoval CZechBoY (26. 12. 2016 22:41)
- Oli
- Člen | 1215
Co mě takhle napadá setkal jsem se se 2 „divnými“ důvody:
- koncovka (pokud s ní pracuješ a předpokládáš .jpg) může být i .JPG
- Velikost souboru – stalo se mě (moc tomu nerozumím) že obrázek měl pár mega (do 8MB myslím), ale byl nějak progresivně komprimovanej a po načtení do Image měl přes 50 MB (nebo tak nějak).
- Gappa
- Nette Blogger | 209
Oli napsal(a):
- Velikost souboru – stalo se mě (moc tomu nerozumím) že obrázek měl pár mega (do 8MB myslím), ale byl nějak progresivně komprimovanej a po načtení do Image měl přes 50 MB (nebo tak nějak).
Podstatnou věcí při zpracování obrázku není jeho datová velikost, ale rozlišení, protože to určuje paměťovou náročnost.
Obrázek vyplněný jen jednou barvou a rozlišením 5000×5000 bude mít podstatně menší datovou velikost než reálná fotka takového rozlišení – prostě jde lépe (ztrátově, v případě jpg) zkomprimovat.
- parti
- Člen | 117
CZechBoY : chybu mi to práveže nevyhodí žádnou prostě se akce neprovede a obrázek se neuloží. Pokud je obrázek vetší než 5MB tak mi vybehne informační okno že velikost obrázku přesáhla hranici 5MB.
Oli: no obrázky které mohu náhrat tak maji koncoku .JPG a stejne i obrázek který nahrát nemohu má koncovku .JPG kliden vám je zašlu někam.Pokud se na ty obrázky budete chtít podívat.. Ja jsem předpokládal jestli nemám nějakou chybu v kodu.Ale zase na druhou stranu mi to nekteré obrákzky typu .JPG uloží.
Vyzkoušel jsem to pro jistotu znovu a pořád stejný výsledek jeden .JPG
uloží a druhý .JPG neuloží.
I když to mám uložené jako .jpg tak mi to ten obrázke neuloží.
Děkuji za odpoved
Editoval parti (27. 12. 2016 15:13)