Image::fromString validace onoho String?

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

Řetězec který dostanu (a ve kterém by měl být obrázek) pomocí metody fromString() třídy Image ho pak paředělám na obrázek, to je super, ale v té době pořád nevím jaký druh obrázku vlastně mám, o tom jestli vůbec mám obrázek ani nemluvě.

Mohu nějak zkontrolovat jestli jde o obrázek nemo mime typ souboru když kýžený obrázek (nebo možná taky úplně něco jiného) získám z řetězce?

kravčo
Člen | 721
+
0
-

Validita reťazca sa kontroluje, veď si vyskúšaj:

Image::fromString('invalid image string');

Myslím, že typ pôvodného obrázku nemá zmysel zisťovať, keďže volaním Image::fromString() dostaneš objekt triedy Image (a v ňom zabalený GD resource) ktorý je od konkrétneho typu obrázku nezávislý.

ic
Člen | 430
+
0
-

Skutečně, validita se kontroluje… jen jsem nevěděl jak na to, protože pořád mi to vypysovalo minimálně Warning: imagecreatefromstring(): Data is not in a recognized format in /var/www/web5/tinyuri.eu/libs/Nette/Image.php on line 131
no nakonec jsem to musel vyřešit zavináčem, jinak fakt už nevim.

try {
$image = @Image::fromString('retezec');
} catch (Exception $pff){
//nezadal jste obrázek
}

Ale typ obrázku tam je důležitý… v některých případech docela dost. Na zkoušku jsem si vzal php logo (ten obrázek z php manuálu vlevo nahoře), který je gif a pokud ho vypíšu jako jpeg bude mít místo průhlednoho pozadí pozadí zelené. A kombinace modro-fialové s brčálově zelenou je módní sebevražda.

No udělal jsem si na to takovou malou pomůcku co vyhledá typ obrázku ze začátku toho řetěze, dokud ho mám načtený jako řetězec a zatím to tak funguje, moc obrázků jsem na tom ale zatím netestoval tak nevím jako moc to je či není spolehlivé.

kravčo
Člen | 721
+
0
-

ic napsal(a):

Ale typ obrázku tam je důležitý… v některých případech docela dost. Na zkoušku jsem si vzal php logo (ten obrázek z php manuálu vlevo nahoře), který je gif a pokud ho vypíšu jako jpeg bude mít místo průhlednoho pozadí pozadí zelené. A kombinace modro-fialové s brčálově zelenou je módní sebevražda.

Myslím, že to nie je problém gif → jpeg, ale skôr, že pri vykreslení do jpegu sa (prirodzene) stratí priehľadnosť a gd (asi) nevie, ako ju nahradiť, takže tam hodí nejakú farbu… keď vykresľuješ nejaký (možno priehľadný) obrázok do jpegu, bolo by vhodné dať mu explicitné pozadie…

ic
Člen | 430
+
0
-

Samozřejmě že problém vznikl v té chvíli když jsem chtěl převést obázek ve formátu s podporou průhlednosti do formátu bez podpory průhlednosti. O možnosti vložení explicitního pozadí vůbec nevím, respektivě právě teď jsem o ní slyšel ale jinak o ní nic nevím. XD

Při přechodu formátů z bezeztrátového na ztrátový ale přece k nějakým deformacím vždicky musí dojít. Například černou barvou na světlém pozadí psaný text bezpatkovým fontem minimální velikosti po převodu z třeba bmp na jpeg (pokud nejde o bezeztrátový jpeg2000 → mnoho vrstev → obrovská velikost výsledného souboru) je téměř nečitelný.

Z tohoto důvodu myslím že rozpoznání formátu by mělo smysl, nebo nee?

kravčo
Člen | 721
+
0
-

ic napsal(a):

Samozřejmě že problém vznikl v té chvíli když jsem chtěl převést obázek ve formátu s podporou průhlednosti do formátu bez podpory průhlednosti. O možnosti vložení explicitního pozadí vůbec nevím, respektivě právě teď jsem o ní slyšel ale jinak o ní nic nevím. XD

Nastavením explicitného pozadia som myslel to, že obrázok umiestniš na obrázok s nepriesvitným pozadím. Ak nie je priesvitný tak celé pozadie prekryje, ak priesvitný je, namiesto priesvitnosti vznikne prechod do pozadia.

$fg = Image::fromFile('image.png');
$bg = Image::fromBlank($fg->width, $fg->height, Image::rgb(255, 255, 255));
$bg->place($fg);
$bg->send(Image::JPEG);

Při přechodu formátů z bezeztrátového na ztrátový ale přece k nějakým deformacím vždicky musí dojít. Například černou barvou na světlém pozadí psaný text bezpatkovým fontem minimální velikosti po převodu z třeba bmp na jpeg (pokud nejde o bezeztrátový jpeg2000 → mnoho vrstev → obrovská velikost výsledného souboru) je téměř nečitelný.

Vždy záleží na nastavenej kvalite… Ale súhlasím, že png posielať ako jpg a naopak je blbosť… Image::fromFile() obsahuje detekciu na základe prípony súboru, Image::fromString() to má šancu zistiť jedine zo stringu…

ic
Člen | 430
+
0
-

Takhle mi to skutečně funguje… díky