Autor | Zpráva | ||
---|---|---|---|
kachnak Profil |
#1 · Zasláno: 14. 5. 2012, 21:12:09
Zdravím,
Je možné otočiť obrázok o 90° príkazom ale tak, že zostane zachovaná presná veľkosť aj kvalita obrázku? napr: otočil by aj 7MB fotku 6000x3000 px na fotku 3000x6000 px pričom by zostala veľkosť obrázku stále 7MB do posledného bitu v nezmenej kvalite? funkcia http://sk.php.net/imagerotate nato nieje podľa mňa vhodná, pretože sa tam používa imagecreatetruecolor(), čo vlastne vytvorí nový obrázok. a ja chcem len otočiť existujúci na servery. Vďaka |
||
Darker Profil |
#2 · Zasláno: 14. 5. 2012, 21:26:56
K tomu abys obrázek otočil ho musíš vždycky nějak parsovat. Pokud se štítíš funkcí v PHP, můžeš si nastudovat dokumentace jednotlivých formátů a udělat funkci která bude pracovat se surovými daty.
|
||
Keeehi Profil |
#3 · Zasláno: 14. 5. 2012, 22:23:27
kachnak:
O 90° to půjde. Vytvoříš si nový obrázek imagecreatetruecolor() a původní obrázek prolezeš pixel po pixelu po řádcích a do nového obrázku budeš ty pixely malovat ve sloupcích. Hlavně je to pak potřeba uložit v bezztrátovém formátu třeba png. Jiné než pravé a přímé úhly jsou problém. Na to už jsou potřeba znalosti lineární algebry. Klidně můžeš vytvořit vlastní funkce na otáčení, ale nevěřím, že by tvůj algoritmus byl lepší. Ztráty budou skoro vždy, je to však součin dílčích problémů. Největší problém nastává při ukládání. Pokud však zvolíš bezztrátový formát, velmi tím problém zminimalizuješ. |
||
Borius Profil |
#4 · Zasláno: 14. 5. 2012, 22:25:07
kachnak:
Není nezbytné vytvářet nový obrázek – můžeš načíst již existující: //Načtení obrázku $obrazek=imagecreatefromjpeg($cesta, ); //Jinak je postup stejný $otoceni=imagerotate($obrazek, 90, 0); imagejpeg($otoceni); |
||
Davex Profil |
#5 · Zasláno: 14. 5. 2012, 23:01:51
kachnak:
Pokud ti jde o otočení formátu JPEG, tak ten umí otočit bezztrátově pouze specializované programy. Zkus hledat "jpeg lossless rotation". Knihovna GD ani ImageMagick to neumí. |
||
Časová prodleva: 3 roky
|
|||
kachnak Profil |
#6 · Zasláno: 23. 3. 2015, 23:39:18
Ono to vykresluje otočený obrázok pekne ale ako ho potom uložím?
Chcel by som aby mi nahradilo zdrojový obrázok po otočení na serveri, alebo aspon vyrobilo obrazok "b.jpg" vedľa "a.jpg". toto mi nefunguje nieco tam je zle: $imageA='a.jpg'; $imageB='b.jpg'; $source=imagecreatefromjpeg($imageA); $rotate=imagerotate($source,180,0); $newfile=imagejpeg($rotate); copy($newfile, $imageB); |
||
Alphard Profil |
#7 · Zasláno: 23. 3. 2015, 23:49:19
Funkce imagejpeg přijímá v druhém parametru cestu, kam má obrázek uložit.
|
||
juriad Profil |
Druhý parametr funkce imagejpg je cesta, kam ten obrázek uložit. V tvém případě to bude $imageB.
|
||
kachnak Profil |
#9 · Zasláno: 24. 3. 2015, 07:45:08
diky moc :)
|
||
Juraj Hajdúch Profil |
#10 · Zasláno: 24. 3. 2015, 16:04:20
kachnak:
„otočil by aj 7MB fotku 6000x3000 px“ Všetko záleží na nastavení serveru (php.ini -> memory_limit), avšak pochybujem, že by mal nejaký produkčný hosting nastavený tanto limit na menej ako 32 mega (ja mám 128), a to na uvedenú rotáciu v pohode postačuje. |
||
Alphard Profil |
#11 · Zasláno: 24. 3. 2015, 18:51:12
Juraj Hajdúch:
„(ja mám 128), a to na uvedenú rotáciu v pohode postačuje.“ No, to bych zas tak netvrdil. Při rotaci barevného obrazu o velikosti 6000x3000 px pomocí GD knihovny bude potřeba asi 185 mega paměti. |
||
Juraj Hajdúch Profil |
Alphard:
No mne vyšlo iné: 6k * 3K = 18M záznamov o farbe pixelov. jeden záznam má 3B, čiže 18MB * 3 = 56MB ak tam máme fcie imagecreatefromjpeg a imagecreatetruecolor, tak je to 2 * 56MB tj. cca 112MB plus nejaká tá réžia podľa mňa to cez 128 megabytov ísť nemôže Ani mi nevyhodilo chybu Ak je tu na to nejaký odborník, nech sa vyjadrí, je možné, že sa mýlim. EDIT: Podľa online kalkulátoru www.dotsamazing.com/en/labs/phpmemorylimit to naozaj vychádza 185MB, ale potom nechápem, prečo mi nevyhodilo chybu pri memory_limit = 128MB. :-o |
||
Alphard_ Profil * |
#13 · Zasláno: 24. 3. 2015, 20:53:28
Mně padlo do oka to „v pohodě“, hned po přečtení se mi zdálo, že to musí být dost na hraně a ne v pohodě :-)
Ten váš základní výpočet asi bude cca sedět, tweak faktor 1.8, kterým to násobí ten kalkulátor, zohledňuje nějaké režie a nepřesnosti a je značně nadsazený, přesně to nelze říct. Oni sami píší že v praxi je 1.5 ok a vychází mi, že s 1.2 by se to vešlo do 128 mega. Pokud by bylo možné použít ImagicK, je to samozřejmě lepší, na něj se PHP limit nevztahuje. |
||
Časová prodleva: 9 let
|
0