Tällä yritän siis kopioda kuvan hakemistoon ja sen jälkeen muuttaa sen kokoa puolella, muttei oikein onnistu... tai siis kuvan kopioiminen hakemistoon onnistuu kyllä, mutta kuvakoko pysyy samana eli tuo imagecopyresize() ei ota toimiakseen. Minen ymmärrä missä on vika. Että jos joku viittis vähän vinkata.
<?php .... elseif ($action == 'pic_added') { $img_name_p1 = date("ymdHis"); $img_name_p2 = ".jpg"; $img_name = $img_name_p1 . $img_name_p2; $sql_lauseke = "INSERT INTO news_images (news_id,name,text) VALUES ('$news_id','$img_name','$text')"; if (!$kysely = mysql_query($sql_lauseke,$yhteys)) { echo 'sweet'; } else { copy($image, "../images/news_images/" . $img_name); // File and new size $filename = "../images/news_images/" . $img_name; $percent = 0.5; // Content type // header('Content-type: image/jpeg'); // Get new sizes list($width, $height) = getimagesize($filename); $newwidth = $width * $percent; $newheight = $height * $percent; // Load $thumb = imagecreate($newwidth, $newheight); $source = imagecreatefromjpeg($filename); // Resize imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); // Output //imagejpeg($thumb); } } ....?>
Output on tagitettu pois käytöstä joka näyttää kuvan
Wizard kirjoitti:
Output on tagitettu pois käytöstä joka näyttää kuvan
Joo elikkäs kun tuo header ja output on käytössä tulee tulee seuraavanlainen virheilmoitus:
lainaus:
Warning: Cannot modify header information - headers already sent by (output started at d:\workshop\markotarkkala.com\cms\index.php:13) in d:\workshop\markotarkkala.com\cms\uutiset.php on line 129
Jonka jälkeen 500 riviä jotain ihme merkistöjä joista ei Erkkikään ota selvää... mites ton kanssa tulis toimia... missä se header on oikein lähetetty... en sitäkään oikein hiffannut.
Olet tulostanut jo jotain rivillä 13. ob_start();
alkuun ja ob_end_flush();
loppuun. Tai sitten olet tulostamatta.
puskurointi kuvan tulostuksessa nyt tuskin on ihan oikea ratkaisu...
Et voi tulostaa yhtään merkkiä (mukaan lukien välilyönnit!) ennen kuvan tulostusta.
Wizard kirjoitti:
Et voi tulostaa yhtään merkkiä (mukaan lukien välilyönnit!) ennen kuvan tulostusta.
No johan menee hankalaksi.
Voiskohan tota toteuttaa jollain muulla tavalla?
Tarkoituksen siis lisätä kuva/kuvia uutiseen (osa sisällönhallintajärjestelmää)ja tehdä sitten kuvasta lisäksi thumbnaili ton imagecopyresize:n avulla.
Kun kuvaan on tehty tarvittavat muutokset, uusi kuva täytyy vielä tallentaa jonnekin. Tämä tapahtuu funktiolla imagejpeg (tai missä muodossa kuvan haluaakin tallentaa), mutta kuvan sisältöä ei voi suoraan tulostaa sivun jatkeeksi (näkemäsi käsittämättömät merkit), vaan kuva täytyy tallentaa tiedostoon antamalla funktion toiseksi parametriksi tiedoston nimi. Tämän jälkeen kuvan voi näyttää sivulla tavalliseen tapaan img-tagilla.
<?php require "../connect.php"; $yhteys = AvaaTietokanta(); $img_name_p1 = date("ymdHis"); $img_name_p2 = ".jpg"; $img_name = $img_name_p1 . $img_name_p2; $sql_lauseke = "INSERT INTO resize (name,imagetext) VALUES ('$img_name','$imagetext')"; if (!$kysely = mysql_query($sql_lauseke,$yhteys)) { echo mysql_error(); } else { copy($image, "../images/resized_images/" . $img_name); // File and new size $filename = "../images/resized_images/" . $img_name; $percent = 0.5; // Content type header('Content-type: image/jpeg'); // Get new sizes list($width, $height) = getimagesize($filename); $newwidth = $width * $percent; $newheight = $height * $percent; // Load $thumb = imagecreate($newwidth, $newheight); $source = imagecreatefromjpeg($filename); // Resize imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); //Output imagejpeg($thumb); } ?>
Nyt tää toimii kun laiton ylläolevan koodin omalle sivulleen ja lomakedata lähetetään tälle sivulle. Mutta miten sitten saan kopioitua myös tuon muutetun kuvan tonne hakemistoon? Eli nyt se vaan tulostuu sivulle ja ainoastaan alkup. kuva kopioituu hakemistoon (niinku pitääkin).
Katoppa varsin mitä tuo imagejpeg-funktio ottaa parametreikseen: https://www.php.net/manual/en/function.
Ai juu.. Danke.
Kuvanlaatu näyttäis huononevan aikalailla tuossa. Onko keinoja saada kuvanlaatu pysymään hyvänä käsitellyissä kuvissa?
Katsoitko varmasti kaikki parametrit? :) Tuo imagejpeg-funktio kun kelpuuttaa parametrikseen myös tuotettavan kuvan laadun. Tai en tiedä, heikkeneekö laatu tuolla 100-arvollakin, mutta kokeile jos et vielä ehtinyt kokeilla.
Olga kirjoitti:
Katsoitko varmasti kaikki parametrit?
Juu katoin. Mutta johtunee tosta imagecopyresize:sta että kuvassa on vain 255 väriä... onkohan tolle vaihtoehtoja?
Funktiot imagecreatetruecolor kuvan luonnissa ja imagecopyresampled kuvan pienennyksessä voisivat auttaa.
Sebu kirjoitti:
Olga kirjoitti:
Katsoitko varmasti kaikki parametrit?
Juu katoin. Mutta johtunee tosta imagecopyresize:sta että kuvassa on vain 255 väriä... onkohan tolle vaihtoehtoja?
Muistini mukaan nettiselaimet ja netti yleensäkin tuntee vain 254 tai 255 väriä? Eli se 16M taitaa jäädä haaveeksi...
--W--
Wizard kirjoitti:
Muistini mukaan nettiselaimet ja netti yleensäkin tuntee vain 254 tai 255 väriä? Eli se 16M taitaa jäädä haaveeksi...
Selaimilla voi katsoa mm. JPG-kuvia ja tässä päässä kaikki (Arachnea lukuunottamatta) ovat osanneet näyttää ne täysvärisinä..
-Grey-
Antti Laaksonen kirjoitti:
Funktiot imagecreatetruecolor kuvan luonnissa ja imagecopyresampled kuvan pienennyksessä voisivat auttaa.
Kiitos! Nyt pelittää värien kanssa.
Vielä hieman mutkia matkassa...
eli omalla koneella tulee sellainen ongelma että jos kuvan tiedostokoko ylittää 2.0 Megatavua, kuva ei kopioidu kansioon. Mistä johtuu pitääkö säätää kenties jotain asetuksia vai kuinka?
...sitten vielä varsinaisella sivujen palvelimella... siellä isompikin kuva kyllä kopioituu kansioon, mutta jos tiedostokoko ylittää jonkun tietyn rajan (en ole selvittänyt tarkkaa rajaa), niin silloin pienennetty versio kuvasta jää kokonaan luomatta... mistäköhän tää sitten taas johtunee?
php.ini:ssä säädät lähetettävien "datapakettien" maksimikokoa enemmäksi kuin 2mt.
Short Php kirjoitti:
php.ini:ssä säädät lähetettävien "datapakettien" maksimikokoa enemmäksi kuin 2mt.
Löysin. Kiitos.
Tällainen tuli sivujen omalla palvelimella... ma ei ummarra?
Voisko joku selventää mistä kyse.
lainaus:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 12000 bytes) in /testi/cms/uutiset.php on line 168
Sebu kirjoitti:
Tällainen tuli sivujen omalla palvelimella... ma ei ummarra?
Voisko joku selventää mistä kyse.lainaus:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 12000 bytes) in /testi/cms/uutiset.php on line 168
Joo löysinkin vastauksen tähän.
This error message can spring up in a previously functional PHP script when the memory requirements exceed the default 8MB limit. Don't fret, though, because this is an easy problem to overcome.
To change the memory limit for one specific script by including a line such as this at the top of the script:
ini_set("memory_limit","12M");
The 12M sets the limit to 12 megabytes (12582912 bytes). If this doesn't work, keep increasing the memory limit until your script fits or your server squeals for mercy.You can also make this change permanently for all PHP scripts running on the server by adding a line like this to the server's php.ini file:
Aihe on jo aika vanha, joten et voi enää vastata siihen.