Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kopioidun kuvan pienennys

Sivun loppuun

Sebu [10.04.2007 20:29:31]

#

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

				}
		} ....?>

Wizard [10.04.2007 20:50:08]

#

Output on tagitettu pois käytöstä joka näyttää kuvan

Sebu [10.04.2007 21:35:39]

#

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.

SysRq868 [10.04.2007 21:43:08]

#

Olet tulostanut jo jotain rivillä 13. ob_start(); alkuun ja ob_end_flush(); loppuun. Tai sitten olet tulostamatta.

ajv [10.04.2007 21:57:49]

#

puskurointi kuvan tulostuksessa nyt tuskin on ihan oikea ratkaisu...

Wizard [10.04.2007 22:15:18]

#

Et voi tulostaa yhtään merkkiä (mukaan lukien välilyönnit!) ennen kuvan tulostusta.

Sebu [10.04.2007 23:10:36]

#

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.

Antti Laaksonen [10.04.2007 23:35:24]

#

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.

Sebu [06.05.2007 14:56:46]

#

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

Olga [06.05.2007 15:36:09]

#

Katoppa varsin mitä tuo imagejpeg-funktio ottaa parametreikseen: https://www.php.net/manual/en/function.imagejpeg.php

Sebu [06.05.2007 15:43:52]

#

Ai juu.. Danke.

Sebu [06.05.2007 18:33:22]

#

Kuvanlaatu näyttäis huononevan aikalailla tuossa. Onko keinoja saada kuvanlaatu pysymään hyvänä käsitellyissä kuvissa?

Olga [06.05.2007 19:16:37]

#

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.

Sebu [06.05.2007 20:10:14]

#

Olga kirjoitti:

Katsoitko varmasti kaikki parametrit?

Juu katoin. Mutta johtunee tosta imagecopyresize:sta että kuvassa on vain 255 väriä... onkohan tolle vaihtoehtoja?

Antti Laaksonen [06.05.2007 20:19:49]

#

Funktiot imagecreatetruecolor kuvan luonnissa ja imagecopyresampled kuvan pienennyksessä voisivat auttaa.

Wizard [06.05.2007 20:50:12]

#

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

Grey [06.05.2007 21:33:06]

#

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-

Sebu [07.05.2007 06:39:14]

#

Antti Laaksonen kirjoitti:

Funktiot imagecreatetruecolor kuvan luonnissa ja imagecopyresampled kuvan pienennyksessä voisivat auttaa.

Kiitos! Nyt pelittää värien kanssa.

Sebu [07.05.2007 19:19:59]

#

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?

Short Php [08.05.2007 20:33:52]

#

php.ini:ssä säädät lähetettävien "datapakettien" maksimikokoa enemmäksi kuin 2mt.

Sebu [09.05.2007 19:12:36]

#

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 [10.05.2007 07:41:54]

#

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.

http://www.tech-recipes.com/:

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:


Sivun alkuun

Vastaus

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

Tietoa sivustosta