Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kuvan kääntäminen fwrite

creepy [16.01.2013 18:51:50]

#

Missä muodossa kuva on fwrite vaiheessa? onnistuuko kuvan kääntäminen tuossa muodossa? vai pitääkö se muuttaa jotenkin ja sitte vielä takaisin?

alla koodi miten kuva talletetaan, mutta $attachment kuvan haluaisin kääntää imagerotatella. täytyykö se tehdä toisaalla?

$fp = fopen($kuvannimi, "w+");
fwrite($fp, $attachment['attachment']);
fclose($fp);

onnistuuko kuvan kääntö(90 astetta) tulostus vaiheessa jotenkin kätevästi? jos se on tallennettu vinoon?

Olen tässä koodaamassa exif tietojen mukaan käännettävää kuvaa, kun kamerasta suoraan ladattaessa näkyvät sivuilla vinossa.

Ymmärsikö kukaan mitä ajan takaa?

Metabolix [16.01.2013 19:05:02]

#

PHP:n tiedostofunktiot käsittelevät tavuja eli raakaa dataa eli sitä samaa sotkua, jota näet, jos avaat kuvan vaikka Notepadilla. Jotta voisit käyttää imagerotate-funktiota, sinun pitää ladata kuva funktiolla imagecreatefromstring ja lopuksi tallentaa vaikka funktiolla imagejpeg. Kuvan kääntäminen muuten kuin 90 asteen kulmassa heikentää kuitenkin kuvan laatua, joten kuvaa ei kannata kääntää turhaan. JPEG-muodossa ylipäänsä kuvan lataaminen ja tallentaminen heikentävät laatua entisestään.

creepy [16.01.2013 19:58:17]

#

Miten te tekisitte kuvan kääntämisen?

Minulla on yhenlainen kuvafeedi, johon lähetetään sähköpostilla kuvia. Jotkin kuvat tulevat vaakatasossa vaikka on kuvattu pystyssä.

Tämän haluaisin korjata. Exifistä saan kyllä tiedon miten käännetään.

Se voi levyllä olla vinossa, mutta kuhan saisi näkymään oikein.

javasctip yms? nyt ei keksi mistä alottaa.

samip [16.01.2013 20:08:41]

#

Tietoa PHP:n kuvafunktioista.

lainaus:

imagerotate — Rotate an image with a given angle

Linkin takaa löytynee myös tarvittavat esimerkit. Jos tarkoituksena ei ole opiskelu niin tuohon löytyy varmasti valmistakin softaa.

creepy [16.01.2013 22:28:14]

#

Tarkemmin ajateltuna kuva pitää kääntää kun se palvelimelle tallennetaan, jos kuvaa tarkastellaa kokonaisena niin onpahan oikein päin..

saapi antaa lisävinkki vielä missä vaiheessa sen käännön voi tehä, ja miten.

pelkkä php.netin imagerotate ohje ei näytä riittävän

punppis [17.01.2013 05:54:20]

#

Putkastakin löytyy hyvä tutoriaali kuvanmuokkaukseen PHP:n kanssa: https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=php_15

Jos tuo ei riitä, niin tarkemmin asiasta voi lukaista PHP:n dokumentaatiosta osoitteessa https://www.php.net/manual/en/ref.image.php.

Koska tiedosto löytyy varmaan palvelimelta siinä vaiheessa kun PHP:ta ajetaan, niin helpoin on varmaan avata tiedosto suoraan käyttämällä imagecreatefromjpeg-funktiota.

Kuten tuossa on jo mainittu, niin jpg:nä uudelleentallentaminen huonontaa laatua, kokeile. Valokuvien kanssa en keksi oikein muutakaan tapaa, mutta tietynlaisten kuvien kanssa png:nä tallentaminen voisi olla vaihtoehto, koska valokuvat tuppaavat viemään turhan paljon tilaa png:nä.

EDIT: Taisikin tulla väärinkäsitys tun tiedoston olemassaolosta. No kyllä sillä GD:llä tuosta stringistäkin saa toki avattua.

Metabolix [17.01.2013 08:39:47]

#

creepy kirjoitti:

pelkkä php.netin imagerotate ohje ei näytä riittävän

Kannattaisi lukea myös muiden tarvittavien funktioiden ohjeet. Mainitsin funktiot edellisessä viestissäni. Noilla ohjeilla pitäisi onnistua oikein hyvin, vai osaatko ohjelmoida ollenkaan? Käytännössä ei tarvitsisi kuin vaihtaa imagerotate-esimerkkiin kuvan lataukseen imagecreatefromstring (argumenttina tuo data, jonka nyt annat fwrite-funktiolle) ja lisätä imagejpeg-funktiolle toiseksi argumentiksi tiedostonimi.

Kuitenkin kerroin jo myös, että kuvan kääntöä ei pidä tarpeettomasti tehdä PHP:n kuvafunktioilla, koska ne tekevät aina häviöllisen käännöksen (purkavat kuvan, kääntävät pikselit ja pakkaavat uudestaan). Häviöttömän käännön 90 asteen kulmassa voi tehdä komentorivillä (tai PHP:n shell_exec-funktiolla) ohjelmalla jpegtran, jos se on asennettu palvelimelle.

jpegtran -rotate 90 kuva.jpg > uusi.jpg

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta