Kuinka tehdään turvallinen kuvan lataus palvelimelle?
Kuvan uudelleen nimeys esim. 0fy5d2c6b.jpg ja kelpaa yleisimmät kuvatiedostot.
Tässä muokattavaksi.
Lue Upload-koodivinkki kohdasta case "kuva-tark"
. Ei ole täydellinen mutta varmaan noissa olosuhteissa ajaa asiansa. (Nykyään voisi jo selaimen puolella skaalata kuvan sopivaksi ja muuntaa jpg-muotoon.)
Metabolix kirjoitti:
Lue Upload-koodivinkki kohdasta
case "kuva-tark"
. Ei ole täydellinen mutta varmaan noissa olosuhteissa ajaa asiansa. (Nykyään voisi jo selaimen puolella skaalata kuvan sopivaksi ja muuntaa jpg-muotoon.)
Enpä näe mitään iloa kuvan pakkaamisesta selaimen päässä. Säästähän se vähäsen kaistaa, mutta asetusten muuttamisesta tulee vaikeampaa, varsinkin jos tekee rajapintaa mobiilisovellukselle. Lisäksi käytännössä aina halutaan tuottaa kuvasta useita eri kokoja ja näiden generointi selaimen päässä on yksinkertaisesti tyhmää.
Olen tuota koodivinkkiä joskus katsonut. Option toiminnolle ei ole käyttöä, eikä siinä ole insert tietokantaan. Olisiko vähän yksinkertaisempaa koodia tuohon laittamaani ylläolevaan esimerkkiin?
Kuinka png-kuvan voisi muuntaa jpg ladattaessa palvelimelle?
Sopetus kirjoitti:
Option toiminnolle ei ole käyttöä, eikä siinä ole insert tietokantaan.
Vai niin. Ei luulisi tämän olevan ongelma, kun tietokantakoodi sinulla jo näyttää olevan ja valikon voit helposti poistaa. Meinasithan kuitenkin itse ohjelmoida jotain etkä pelkästään kopioida valmiita koodeja? (Muista lisenssit: mitään koodia ei saa kopioida ilman lupaa.)
Koodivinkistä voit opetella, miten tiedot ovat $_FILES-taulukossa ja miten tiedosto tallennetaan.
Kuvan muuntaminen onnistuu helposti GD-kirjastolla, jos se on palvelimella käytössä, ja tästä löytyy netistä esimerkkejä helpoilla hakusanoilla kuten ”php convert image jpg”. Monimutkaisempia muunnoksia voi sitten tehdä vaikka ImageMagick-kirjastolla, mutta sitä varten pitäisi nähdä itsekin vähän vaivaa.
Yksinkertaistettuna voisit lisätä tiedoston käsittelyn oman koodisi alkuun tähän tapaan:
$_POST["kuva"] = null; if (empty($_FILES["kuva"]["error"]) && !empty($_FILES["kuva"]["tmp_name"])) { $data = file_get_contents($_FILES["kuva"]["tmp_name"]); if ($gd = imagecreatefromstring($data)) { $nimi = "kuva_" . hash("sha256", $data) . ".jpg"; if (imagejpeg($gd, $nimi)) { $_POST["kuva"] = $nimi; } } } if ($_POST["kuva"] === null) { die("Kuvan lähetys epäonnistui."); }
Selkeitä lisätietoja esimerkiksi virheiden käsittelystä on koodivinkissä, joka siis pitäisi lukea ja opetella ajatuksella eikä vain yrittää kopioida sellaisenaan.
GD-kirjaston tuottama kuvanlaatu on karmeaa roskaa varsinkin kuvan kokoa muuttaessa. Yksi tärkeä asia, mikä tulee huomioida PNG-kuvia JPEG:ksi muuntaessa on PNG:n tuki läpinäkyvälle taustalle. Jos vain muuntaa kuvan JPEG:ksi ilman mitään muuta käsittelyä, läpinäkyvyys korvautuu mustalla värillä. Yleensä odotamme valkeaa taustaväriä tai esimerkiksi shakkilautakuviota.
Aihe on jo aika vanha, joten et voi enää vastata siihen.