• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Bild rastern und in Array speichern ???

Status
Für weitere Antworten geschlossen.

terra75

Neues Mitglied
Hallo erstmal,

also die Überschrift sagt ja eigentlich schon alles.
Ich habe ein einzelnes Bild !! Dieses ist so aufgeteilt, das 3 Bilder nebeneinander und 4 untereinander auf das einzelne Bild passen. Sprich, es sind insgesammt 12 einzelne Grafikelemente auf dem Bild zu sehen.

Da ich weis, das man z.B. bei einem RollOver Effekt mit CSS die Bereiche der Bildabschnitte definieren kann, kam mir die Idee, das auch mit meinem Bild zu machen. Somit hätt ich dann 12 Einzelbilder definiert, die jetzt aber als Variable in PHP gelangen müssen.

Und nun ist die Frage an euch ...

Ist es Sinnvoll, da es auch um Geschwindigkeit geht, das über CSS zu machen oder sollte ich lieber das Bild direkt von PHP Rastern lassen? Leider weis ich nicht, wie das dann geht. Könnt mir da jemand weiterhelfen?

Um es nochmal deutlich zu machen .. die 12 Einzelbilder ergeben hintereinandergelegt eine Animation. Da es sich aber nicht nur um ein Bild handelt sondern um hunderte, und ich die Animation auch kontrollieren möchte bietet sich nur diese Möglichkeit an. Gif Grafiken wären da totaler humbug !

Achso ... Die 12 Einzelbilder sollten in einem Array gespeichert werden und nicht als kleine Bildchen abgespeichert werden. Ist wohl das wichtigste an der ganzen Sache !

Vielen Dank für jede Hilfe die kommt !

Terra
 
Zuletzt bearbeitet:
Ich würde Dir ja gerne weiterhelfen, aber ich verstehe mit bestem Willen nicht, was Du machen willst.

Gruß thuemmy
 
So .. hab schon einiges selber rausgefunden wie man ein Teil eines Bildes ausschneidet...
Hab dafür eine kleine Function in PHP geschrieben die meines Verständnisses richtig sein müsste.
PHP:
function rasterpic ($bild) {

$sourcefile_id  = imageCreatefrompng($bild);
$insertfile_id = imageCreate( 33, 45 );

imageCopy ($insertfile_id, $sourcefile_id, 0, 0, 33, 45, 33, 45 );
header("Content-type: image/png");
imagepng ($insertfile_id, $ausgabebild);

imagedestroy($insertfile_id);
imagedestroy($sourcefile_id);

return $ausgabebild;
}
Rufe ich aber allerdings die Funktion auf mit z.B. rasterpic('/images/bild.png'); bekomme ich eine seltsame Ausgabe. Dabei wird mir auf meinem Localen Rechner folgendes angezeigt:

Code:
‰PNG  ��� IHDR���!���-���øò&���ZPLTE1�Õ¤b´{1ö½{öÿÿ{)ÿÕ¤RRR{{{ÕÕÕ¬Õÿ1�½½½œœœ �J½ÍÞÿAœZÍœ¬ÿ �)))���Z ��”AÍs9îœ{jjj� {¼e¼��ŒIDATxœå”–‚ FGsM tÌÚÞÿ5÷ÿ:û;ÇŠ†{G"¢Ji®/”DóÕR£ôµùž¨j™9CúÓl¢vZ*ݼciàrä0Gk CAÜÆIVs²lDæ q²V¢ ‚Ø~"êˆÑDZ1Ä(b€BQÖÅQ:BÌr/¬‚vãùaç9®ã£Xè{~yÔõ³�}"Öqýýúé ¢~ýìÈ£,ò!÷Âý5ç‹sÄÜ;ׇ·àÓÄl�8©²I«É[$�¾&õ®ÇU"§é”—�‡‰»(<ë`ÞL&ž*—¥Wé8u˜tí´î®ªJ·Cõ§‰p©Y¥�ZÃiVaÁY…Pä4×¹ùÙL·Î` Ü6“ ±`ž…SÄÈj2*µÞã ›°>šV {RÌûÏAcÕ„Ç@¢Ò a7Ä:bÑÉ/6ÊFÓDÞȪZ†ÔÆ:mBLNTH{ œ›güSé@xƒ»Ô%tâ /{ú®"¢ÓA×����IEND®B`‚
Dieses wird mir im Internet auf dem Server garnicht angezeigt ! Aber auch kein Bild.
Ja, ich sehe es auch . .das ist der Code von dem Bild ... aber warum ? habe es auch mal so versucht:
PHP:
<img src="'.rasterpic('../images/bots/'.$zeile['bot_pic']).'">
bringt aber genau so wenig.
Aso, um das Quellbild handelt es sich um eine 180x320 große - teilweise transparente PNG Grafik, die auch beim kopieren transparent bleiben soll !

Wo liegt denn bittschön jetzt der Fehler ?

Terra
 
Zuletzt bearbeitet:
Ich verstehe zwar immer noch nicht was Du da machen willst, aber ich denke mal, dass Du bei der Ausgabe des Bildes vergessen hast, einen entsprechenden header vorab zu senden. Nun weiß der Browser gar nicht, was er mit Zeichen machen soll. Hab da aber auch keinen richtigen Plan davon, aber das Stichwort header sollte Dir weiterhelfen.

Gruß thuemmy
 
Habs ... waren mehrere Sachen wo ich grade bissel am grübeln bin warum ... naja, jetzt ist erstmal der 1. Schritt getan.

Funktion:
PHP:
function rasterpic ($bild, $ausgabebild) {
$sourcefile_id  = imageCreatefrompng($bild);
$insertfile_id = imageCreate( 24, 33 );

imageCopy ($insertfile_id, $sourcefile_id, 0, 0, 24, 33, 24, 33 );
header("Content-type: image/png");
imagepng ($insertfile_id, $ausgabebild);

imagedestroy($insertfile_id);
imagedestroy($sourcefile_id);
}

Aufruf:
PHP:
rasterpic('../images/bots/bild.png', ausgabebild);
man beachte, das "ausgabebild" ohne $ davor geschrieben werden muss !

Bild anzeigen:
PHP:
echo '<img src='.ausgabebild.'>';

Problem an der ganzen Sache ist aber immer noch, das die Transparenz des Ursprungsbildes nicht übernommen, sondern mit einer beliebigen Farbe aufgefüllt wird.

Terra
 
Folgendes zusätzlich probiert:

PHP:
function rasterpic ($bild, $ausgabebild) {
$sourcefile_id  = imageCreatefrompng($bild);
imageAlphaBlending($sourcefile_id, false); //must be false
imageSaveAlpha($sourcefile_id, true); //must be true
$insertfile_id = imageCreate( 24, 33 );

imageCopy ($insertfile_id, $sourcefile_id, 0, 0, 0, 0, 24, 33 );
header("Content-type: image/png");
imagepng ($insertfile_id, $ausgabebild);

imagedestroy($insertfile_id);
imagedestroy($sourcefile_id);
}

Transparenz klappt aber immer noch nicht !

Terra
 
Habbin jetzt ausgetrickst:

PHP:
function rasterpic ($bild, $ausgabebild) {
$sourcefile_id  = imageCreatefrompng($bild);
$insertfile_id = imageCreate( 24, 33 );

imageCopy ($insertfile_id, $sourcefile_id, 0, 0, 0, 0, 24, 33 );
header("Content-type: image/png");

imagecolortransparent ( $insertfile_id, imagecolorat( $insertfile_id, 1, 1 ));
 //nehme von Bild die Farbe auf pos 1,1 und mach transparent !
imagepng ($insertfile_id, $ausgabebild);

imagedestroy($insertfile_id);
imagedestroy($sourcefile_id);
}
Passt, wackelt und hat Luft ! ... Da Pos 1,1 immer meine trans. Farbe ist !

Terra
 
Zuletzt bearbeitet:
Blöde Frage hinterher ...

PHP:
echo '<img src='.ausgabebild.'>';

Wie kann ich die Variable "ausgabebild" auf Null setzen?
Setze ich die Funktion in eine Schleife bekomm ich immer nur das letzte Bild überall angezeigt.

Terra
 
Dein ausgabebild ist eh falsch.

Du gibst hier in SRC = "" den Inhalt des Bildes an, du müsstest aber die URI angeben

normal src="meinbild.php", bei dir ist es aber praktisch
Code:
src="‰PNG  ��� IHDR���!���-���øò&���ZPLTE1�Õ¤b´{1ö½{öÿÿ{)ÿÕ¤RRR{{{ÕÕÕ¬Õÿ1�½½½œœœ �J½ÍÞÿAœZÍœ¬ÿ �)))���Z ��”AÍs9îœ{jjj� {¼e¼��ŒIDATxœå”–‚ FGsM tÌÚÞÿ5÷ÿ:û;ÇŠ†{G"¢Ji®/”DóÕR£ôµùž¨j™9CúÓl¢vZ*ݼciàrä0Gk CAÜÆIVs²lDæ q²V¢ ‚Ø~"êˆÑDZ1Ä(b€BQÖÅQ:BÌr/¬‚vãùaç9®ã£Xè{~yÔõ³�}"Öqýýúé ¢~ýìÈ£,ò!÷Âý5ç‹sÄÜ;ׇ·àÓÄl�8©²I«É[$�¾&õ®ÇU"§é”—�‡‰»(<ë`ÞL&ž*—¥Wé8u˜tí´î®ªJ·Cõ§‰p©Y¥�ZÃiVaÁY…Pä4×¹ùÙL·Î` Ü6“ ±`ž…SÄÈj2*µÞã ›°>šV {RÌûÏAcÕ„Ç@¢Ò a7Ä:bÑÉ/6ÊFÓDÞȪZ†ÔÆ:mBLNTH{ œ›güSé@xƒ»Ô%tâ /{ú®"¢ÓA×����IEND®B`‚"

Das stimmt ja schonmal nicht.
Außerdem kann das auch nicht sein das man eine Variable ohne $ schreibt.
Das wird wahrscheilnich auf das oben genannte Problem zurückzuführen sein.

wegen dem null setzen:
PHP:
$var = null;
oder wenn du löschen willst:
PHP:
unset($var);
 
hi
wenn du eine Funktion ausgeben willst dann muss du es so machen:
PHP:
$gerastert = rasterpic('../images/bots/bild.png');
echo $gerastert;
glaub ich?!

MFG
Speider
 
Dein ausgabebild ist eh falsch.

Du gibst hier in SRC = "" den Inhalt des Bildes an, du müsstest aber die URI angeben

normal src="meinbild.php", bei dir ist es aber praktisch
Code:
src="‰PNG  ��� IHDR���!���-���øò&���ZPLTE1�Õ¤b´{1ö½{öÿÿ{)ÿÕ¤RRR{{{ÕÕÕ¬Õÿ1�½½½œœœ �J½ÍÞÿAœZÍœ¬ÿ �)))���Z ��”AÍs9îœ{jjj� {¼e¼��ŒIDATxœå”–‚ FGsM tÌÚÞÿ5÷ÿ:û;ÇŠ†{G"¢Ji®/”DóÕR£ôµùž¨j™9CúÓl¢vZ*ݼciàrä0Gk CAÜÆIVs²lDæ q²V¢ ‚Ø~"êˆÑDZ1Ä(b€BQÖÅQ:BÌr/¬‚vãùaç9®ã£Xè{~yÔõ³�}"Öqýýúé ¢~ýìÈ£,ò!÷Âý5ç‹sÄÜ;ׇ·àÓÄl�8©²I«É[$�¾&õ®ÇU"§é”—�‡‰»(<ë`ÞL&ž*—¥Wé8u˜tí´î®ªJ·Cõ§‰p©Y¥�ZÃiVaÁY…Pä4×¹ùÙL·Î` Ü6“ ±`ž…SÄÈj2*µÞã ›°>šV {RÌûÏAcÕ„Ç@¢Ò a7Ä:bÑÉ/6ÊFÓDÞȪZ†ÔÆ:mBLNTH{ œ›güSé@xƒ»Ô%tâ /{ú®"¢ÓA×����IEND®B`‚"
Das stimmt ja schonmal nicht.
Außerdem kann das auch nicht sein das man eine Variable ohne $ schreibt.
Das wird wahrscheilnich auf das oben genannte Problem zurückzuführen sein.

wegen dem null setzen:
PHP:
$var = null;
oder wenn du löschen willst:
PHP:
unset($var);

Nur so Falsch kann es ja garnicht sein, weil es NUR so bei mir funktioniert ! Gebe ich als Variable $ausgabebild ein wird mir nur der BilderCode angezeigt und nicht das Bild selber !!! Und welche URL soll ich bittschön eingeben? Das Bild liegt nach dem rastern in einer Variable (so wie es auch gedacht ist) und nicht in Form einer Datei vor !

Vielleicht kennt ja jemand diese ungewöhnlichen Variablen und kann mir mehr darüber sagen. Bei google konnte ich darüber nichts finden !

EDIT: OK, konnte jetzt doch ein bischen zu den Variablen herrausfinden. Und zwar handelt es sich anscheinend dabei um Objekt Variablen, die genau so definiert sind. Evtl. möglich mit unset($this->ausgabebild); zu löschen ?
Für weitere Infos wär ich dankbar !

Terra
 
Zuletzt bearbeitet:
Könnt ich machen, bringt aber nix, da ich dann wieder das Problem habe nur den Krümecode zu erhalten ... Ich glaub ich bin mir der Objekt Geschichte auf den richtigen Weg ... Auch wenn ich das noch nie gemacht habe aber so schwer scheint es garnicht zu sein. Muss darüber nur das richtige finden.

Weis zumindest schonmal das ich mittels $variable = $this->objekt: das Objekt in eine normale Variable bekommen kann .. muss nur noch gucken obs auch richtig funktiniert, dann ist das Null-stellen auch kein problem mehr.
Bin aber grade nicht zu Hause und kann es deshalb jetzt nicht auf die schnelle ausprobieren.

Terra
 
Hallo,
ich hab mal in meinem PHP Buch(1700 Seiten) nachgeschaut
und folgenden Code gefunden:
PHP:
<?php

// Anzahl der Segmente (X-/Y-Achse)
$seg_x = 4;
$seg_y = 4;


// Bildsegmentierungsfunktion
function bilder_segmentieren($datei, $seg_pfad, $seg_name, $seg_x, $seg_y)
{
	// Einlesen des Originalbild
	$bild = ImageCreateFromPNG($datei);
	
	// Ermitteln der Breite und Höhe
	$bild_breite = imageSX($bild);
	$bild_hoehe = imageSY($bild);
	
	// Breite und Höhe der einzelnen Segmente
	$seg_breite = ceil(($bild_breite/$seg_x));
	$seg_hoehe = ceil(($bild_hoehe/$seg_y));
	
	// Zähler für die fortlaufende Nummerierung
	// der Segmentdateinamen
	$zaehler = 0;
	
	// Segmentliste für die Ausgabe
	$segment_liste = Array();
	
	// Originalbild nach Anteile abtasten
	for ($y = 1; $y < $bild_hoehe; $y += $seg_hoehe) 
	{	
		for ($x = 1; $x < $bild_breite; $x += $seg_breite) 
		{	
			$zaehler++; // Zähler erhöhen
			
			// Bildname für Segment
			$seg_name_komplett = $seg_name.sprintf('%02d', $zaehler).'.png';
			
			// Übergabe von Segmentpfad und Name in die Segmentliste
			$segment_liste[] = $seg_pfad . $seg_name_komplett;
			
			// Erzeugen des Segment
			$segment = ImageCreateTrueColor($seg_breite, $seg_hoehe);
			
			// Kopieren des Segment
			ImageCopyResized($segment, $bild, 0, 0, $x, $y,
			$bild_breite, $bild_hoehe, $bild_breite, $bild_hoehe);
			
			// Beschriftung des Segment
			ImageString ($segment, 2, 5, 5, $seg_name.sprintf('%02d', $zaehler),
			ImageColorAllocate($segment, 0, 0, 0));
			
			// Speichern des Segements
			ImagePNG($segment, $seg_pfad . $seg_name_komplett);
			
			// Segment aus Speicher entfernen
			ImageDestroy($segment);		
		}
	}
	
	// Originalbild aus Speicher entfernen
	ImageDestroy($bild);
	
	// Rückgabewert mit der Segmentliste
	return $segment_liste;
}



// Originalbild zeigen
echo ' <img src="Bilder/bildvorlage.png" style="border: 1px solid #black"> <br />';

// Ausgabe der Segmente in Gruppen
$ausgabe_liste = array_chunk(
	bilder_segmentieren('Bilder/bildvorlage.png', 'segmente/', 'segment_', $seg_x, $seg_y), 
	$seg_x
	);

// Ausgabe der enthaltenen Daten
foreach ($ausgabe_liste as $daten) 
{
	foreach ($daten as $dateiname) 
	{
		echo '<img src="'.$dateiname.'" border="3">';		
	}
	echo '<br />';
}

?>

MFG Speider
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben