• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Bilder mit ajax vom Server dynamisch laden

pimbolie1979

New member
Hallo Leute,

auf meiner Webseite gibt es die Möglichkeit JPEG-Bilder auf den Server hochzuladen. Dies funktioniert auch schon ganz gut. Nachdem ich das Bild hochgeladen und verkleinert habe, möchte ich das Bild auf der Webseite anzeigen. Hierzu möchte ich nicht das die Seite mit PHP neu geladen wird (das bekomme ich hin), sondern ich möchte mit Hilfe von AJAX das Bild vom Server abholen und darstellen. Das Script möchte ich später dann an anderen Stellen für einen dynamischen Bilder load benutzen.

Allerdings habe ich hier erhebliche Probleme und hoffe auf Hilfe von Euch. Ich habe schon einges ausprobiert jedoch scheint das Bild immer im falschen Format für die Darstellung zu sein.


Dies war mein erster Versuch direkt auf ein Bild zuzugreifen das auf meinem Webserver liegt:

HTML:
$.get("http://www.webseite.de/objekt_fotos/157/BMW-5er-GT-M-Sportpaket.jpg", function (rawImageData) 
{
   //$(".prevImg").attr("src", "data:image/jpeg;base64," + rawImageData);

   var readImage = new FileReader();

   // Sofern die Datei komplett in den RAM eingelesen wurde wird eine Funktion ausgeführt.
   readImage.onload = function(event)
  {
      $(".prevImg").attr("src",event.target.result).fadeIn(2000);
   }
   readImage.readAsDataURL(rawImageData);
								
   //console.log("image raw data");
   //console.log(rawImageData);
});


Ein anderer Versuch war mit AJAX und PHP (Dies möchte ich später benutzten):

HTML:
$.ajax(
{
	url: "/php_scripte/get_image.php",
	type: "GET",    
	//dataType: "image/jpeg",
	dataType: "image/jpg",
	data: 'ReportID=67',
	success: function(loaded_image_stream)
	{
		//$('#loadingAnimation').fadeOut('slow', function() { $('#reportNodeView').fadeIn('slow'); });
		//$('#previewImage').attr('src', 'data:image/jpg;base64,' + bytes);
		
		$(".prevImg").attr("src", loaded_image_stream);
		//$('#preview').html(msg);
		
	i = new Image();
	i.src = loaded_image_stream;
	$(this).append(i);
	},

	error: function(error, txtStatus)
	{
		console.log(loaded_image_stream);
		console.log(txtStatus);
		console.log('error');
	}
});


Hier mein PHP Teil:

$file = file_get_contents($_SERVER["DOCUMENT_ROOT"]."/fotos/157/testbild.jpg");
echo base64_encode($file);


Ich hatte es auch mit:

$image_test = imagecreatefromjpeg($_SERVER["DOCUMENT_ROOT"]."/fotos/157/testbild.jpg");
versucht jedoch alles ohne erfolg.


Das was ich programmieren möchte ist folgendes:

1. ich erzeuge eine AJAX Anfrage an meinen Server und übergebe die ID vom Bild
2. das PHP Skript prüft ob das Bild vorhanden ist und öffnet es dann
3. das Bild wird dann nachdem es eingelesen wurde an den User geschickt
4. das Bild wird dann beim User dynamisch in der Webseite integriert

Ich weiß das es sicherlich einige Script im Internet gibt die funktionieren. Jedoch sind die natürlich so mächtig das es sehr schwer ist Diese zu verstehen. Einfache Beispiele sind Mangelware und ich hoffe das Ihr mir hier weiterhelfen könnt

- - - Aktualisiert - - -

Ich glaube ich habe eine Lösung gefunden.

Ich muss doch nicht das Bild mit einer Ajax Anfrage erhalten. Sondern ich kann doch einfach ein leeres Bild auf meiner Seite erstellen und füge den Pfad hinzu. Dann müste doch der Browser das Bild automatisch laden und darstellen.

- - - Aktualisiert - - -

Die Lösung hat auch einen Nachteil:

Diese Lösung hat leider den Nachteil, das der Pfad vom Bild im HTML code steht. Somit sieht jeder den Pfad und kann das Bild herunterladen. Wenn ich das Bild dynamisch lade dann sieht man nur ein base64_encode kodiertes Stream. Hier könnte ich noch ein Wasserzeichen hinzufügen.

Kann ich nicht die FileReader(); Funktion benutzen und einfach den Serverpfad angeben.


Wenn nichts gegen meinen Ansatz spricht dann muss ich nur noch folgendes erledigen:
Jetzt muss ich nur noch mit dem AJAX Post die ID von dem Benutzen an ein PHP Skript schicken und dieser erzeugt mit einen JSON return value. Dort stehen alle Bilder drin und ich erzeuge dann dynamisch so viele Bilder und ändere das SRC Attribute
 
Zuletzt bearbeitet von einem Moderator:
pimbolie1979 schrieb:
Diese Lösung hat leider den Nachteil, das der Pfad vom Bild im HTML code steht. Somit sieht jeder den Pfad und kann das Bild herunterladen. Wenn ich das Bild dynamisch lade dann sieht man nur ein base64_encode kodiertes Stream. Hier könnte ich noch ein Wasserzeichen hinzufügen.
Also wenn du den Pfad verschleiern möchtest kannst du das Bild zur not auch als css backgound image einbinden, wie z.B. bei einer Lightbox.
Im Prinzip ist egal ob das Bild als base64 oder raw bianry vorliegt Rechtsklick bild speicher unter... .
Wenn man das Element untersucht z.B via FireBug findet man de Pfad aber trotzdem.

Das mit dem Wasserzichen versteh ich nicht, wie willst du das in das Bild bekommen? Einfach das base64 bearbeiten, wird nicht funktionieren, damit zerstörst du die Daten.

Das einfachste wäre die Bilder in ein HTML5 Canvas zu laden, dann kannst Du via Pixelmanipulation ein Wasserzeichen erstellen. Die Pfade sind dann auch weg.
HTML canvas drawImage() Method
https://developer.mozilla.org/de/docs/Web/API/Canvas_API/Tutorial/Pixel_manipulation_with_canvas
 
Auch dann sind die Bilderdaten im Netzwerkverkehr sichtbar und speicherbar. Außerdem kann man ein <canvas> auch einfach per Rechtsklick speichern.
Wenn du ein Bild im Browser anzeigen lassen willst, kann der Besucher deiner Seite dieses Bild auch auf seinem Rechner speichern (bzw. es ist schon auf dem Rechner gespeichert, da er es sonst nicht anzeigen kann). So einfach ist das.
 
kkapsner schrieb:
Außerdem kann man ein <canvas> auch einfach per Rechtsklick speichern.
ok, das ist neu in der Anfangszeit vom canvas ging das nicht :confused:
Dann Rechtsklick Deaktivieren

kkapsner schrieb:
So einfach ist das.
Nicht ganz, wenn das nur die Pixelinformation als arraybuffer übertagen werden dann weiß der Browser nicht das ein Bild ist ergo wird nix gespeichert. Der otto normal Mensch kann mit den arraybuffer Daten erst mal nix anfangen. Mehr Abrieglung geht nicht.
 
die Pixelinformation als arraybuffer übertagen
Du willst Bilder wirklich als BMP übertragen? Oder Willst du auf der Clientseite einen JPG oder PNG Parser laufen lassen?

dann weiß der Browser nicht das ein Bild ist ergo wird nix gespeichert
Sobald du die Daten in ein <canvas> schreibst, sind die Daten als Bildinformation vorhanden. Außerdem speichert der Browser das immer - völlig unabhängig, ob das ein Bild ist oder nicht. Du willst im JS ja auf die Daten zugreifen, also müssen sie auch gespeichert sein.

Der otto normal Mensch kann mit den arraybuffer Daten erst mal nix anfangen.
Für den Normalbenutzer reicht es, wenn du das mit dem Hintergrundbild machst... aber dann wird es das Bild einfach per Screenshot speichern.
 
JavaScript abschalten, dann geht der Rechtsklick wieder.
ganz so einfach ist es nicht, da das bild ja per js überhaupt erst gezeichnet wird.
schaltet er js ab, kein bild.
schaltet er es nicht ab, kein rechtsklick.
jetzt noch an das bild zu kommen ist möglich, erfordert aber schon wesentlich mehr kentnisse als den speicher-knopf zu finden.
(im FF z.b. about:config => "dom.event.contextmenu.enabled" => false)

Oder Willst du auf der Clientseite einen JPG oder PNG Parser laufen lassen?
der läuft immer Clientseitig

Für den Normalbenutzer reicht es, wenn du das mit dem Hintergrundbild machst... aber dann wird es das Bild einfach per Screenshot speichern.
ich denke die seiteninformationen kennt auch der großteil der normaluser
 
Zuletzt bearbeitet:
Ich meinte mit JS...
mit js die binärdaten eines jpgs in ein canvas zu zeichnen würde ich jetzt auch nicht verwerflich finden, aber das muss man ja nicht mal machen, sondern kann das dem browser überlassen.

aber ich finde das Ansinnen sowieso sinnfrei. Wer nicht will, dass seine Bilder nicht von jemand anderem gespeichert werden, darf sie einfach nicht ins Netz stellen.
davon abgesehen sehe ich auch keinen grund, das speichern zu verbieten, verwenden darf man sie sowieso nicht und wenn max musterman sie privat auf seiner festplatte hat... ...wen störts?
 
kkapsner schrieb:
Sobald du die Daten in ein <canvas> schreibst, sind die Daten als Bildinformation vorhanden. Außerdem speichert der Browser das immer - völlig unabhängig, ob das ein Bild ist oder nicht. Du willst im JS ja auf die Daten zugreifen, also müssen sie auch gespeichert sein.
Ja aber die Daten sind ja im RAM gespeichert und nicht im den Tamporay internet files/cache. Was im Ram liegt ist ja nicht wirklich gespeichert.

kkapsner schrieb:
Du willst Bilder wirklich als BMP übertragen? Oder Willst du auf der Clientseite einen JPG oder PNG Parser laufen lassen?
BMP is low, dachte mehr so an TIFF, cr2, dng usw. Parser dafür gibt es. Allerdings hat man dann noch kein Bild, erst nach einer handvoll Algorithmen erhält man ein vernünftiges Bild.


kkapsner schrieb:
Glaube ich nicht... aber ich finde das Ansinnen sowieso sinnfrei. Wer nicht will, dass seine Bilder nicht von jemand anderem gespeichert werden, darf sie einfach nicht ins Netz stellen.
Darum geht es mir nicht, wichtig ist nur google darf die Bilder nicht finden, zusätzlich noch soweit wie möglich das speichern des Bildes unterbinden.
-Nicht nur Google sonder auch gewisse Bildsauger.
 
Zurück
Oben