Kirjautuminen

Haku

Tehtävät

Kilpailu

Ohjelmoi tekoälyllä!
Alkaa 1.6.!

Keskustelu: Ohjelmointikysymykset: PHP: Kuvan lataus?

Sopetus [20.11.2022 16:11:45]

#

Kuinka tehdään turvallinen kuvan lataus palvelimelle?

Kuvan uudelleen nimeys esim. 0fy5d2c6b.jpg ja kelpaa yleisimmät kuvatiedostot.

Tässä muokattavaksi.

<?php
include("yhteys.php");

$kysely = $yhteys->prepare("INSERT INTO tuotteet (nimi, hinta, kuva) VALUES (?, ?, ?)");
$kysely->execute(array($_POST["nimi"], $_POST["hinta"], $_POST["kuva"]));

$id = $yhteys->lastInsertId();
header("Location: tuote.php?id=$id");
?>

Metabolix [21.11.2022 08:58:39]

#

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.)

muuskanuikku [21.11.2022 11:21:06]

#

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ää.

Sopetus [22.11.2022 12:14:34]

#

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?

Metabolix [22.11.2022 12:58:05]

#

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.

muuskanuikku [27.11.2022 12:30:06]

#

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.

Vastaus

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

Tietoa sivustosta