Bildergröße ändern aus Media Element ohne Zwischenspeicherung

Ich möchte gerne ein Bild in einem Media Element in der Größe ändern und dann erneut im Media Element ablegen. Das Media Element ist Cached, daher wird der Inhalt nicht ständig in das File geschrieben. Auslesen kann ich das ganze ja mit IPS_GetMediaContent nur wie arbeite ich dann damit mit üblichen PHP Funktionen ohne Zwischenspeicherung weiter?

Ich würde gerne imagecopyresampled nutzten, das setzt aber voraus, dass ich ein File übergebe. Jetzt könnte ich natürlich jedes mal, wenn ich das Bild umrechne das Media Element auslesen und abspeichern und dann das File an die Funktion übergeben. Dies würde dann aber die Funktion Cached komplett überflüssig machen weil dann ständig auf die Festplatte bzw. SD Karte geschrieben wird wenn sich das Bild aktualisiert und neu berechnet wird.

Habe ich da was übersehen oder wie wäre das gedachte bzw. geeignete Vorgehen ein Bild aus dem Speicher des Media Element auszulesen, neu zu berechnen und dann ins Media Element wieder abzulegen ohne einen notwendigen Zwischenschritt über Speicherung in ein File auf Festplatte bzw. SD zu gehen?

Ich habe es selber heraus bekommen


$Content = base64_decode(IPS_GetMediaContent(12345)); 
$image = imagecreatefromstring($Content);

Das kann man dann weiter übergeben.

Ich stehe jetzt vor dem Problem das Image wieder in das Media Element zu übergeben ohne erneut zwischen zu speichern.

Die folgende Lösung geht, macht aber nicht Sinn, da ich dann jedes mal auf die Festplatte, SD schreiben muss dann ist das Caching des Media Elements ja überflüssig.

$thumb ist gd


$thumbfile = IPS_GetKernelDir()."media".DIRECTORY_SEPARATOR.$name.".png";  // Image-Datei
imagepng($thumb, $thumbfile);
imagedestroy($thumb);
$Content = @Sys_GetURLContent($thumbfile);
IPS_SetMediaContent($MediaID, base64_encode($Content));  //Bild Base64 codieren und ablegen

Ich wollte das so probieren


ob_start (); 
imagepng ($thumb);
$image_data = ob_get_contents (); 
ob_end_clean (); 
IPS_SetMediaContent($MediaID, base64_encode($image_data));  //Bild Base64 codieren und ablegen
imagedestroy($thumb);

Da kommt von IP-Symcon aber nur die Meldung
Keine Zuordnung für Unicode-Zeichen in der Multibyte-Zielcodeseite vorhanden

Was ist da falsch bzw. wie muss man da vorgehen um in ein Media Element nach Bearbeitung des Bilds wieder zurückzuschreiben ohne eine Zwischenspeicherung auf der Festplatte?

Komisch, ich mache es nicht anders.
Hier die Funktion GetThumbnail
IPSKodi/KodiClass.php at master · Nall-chan/IPSKodi · GitHub
Michael

Den einzigen Unterschied den ich erkennen kann ist Du hast noch ein @ davor, keine Ahnung ob das was ausmacht. Werde ich mal probieren. Komisch ist das schon eventuell ist aber ja auch in irgend einer anderen Stelle noch ein Fehler, ich werde mal suchen. Danke zumindest für die Rückmeldung das es an sich so funktionieren sollte.

Das unterdrückt eine eventuell auftretende Fehlermeldung.
Wo kommt denn dein Fehler, in welcher Zeile?
Michael

Ich glaub ich habe den Fehler gefunden ich hatte das Bas64 übergeben, wollte das dann nochmals dummerweise Base64 kodieren das war wohl der Fehler. Jetzt geht es.

mirror.png

Jetzt fehlt mir nur noch der Kipp Effekt. Du weist nicht zufällig wie imageaffine funktioniert aus der nicht vorhanden Doku blicke ich da nicht durch. Mit ImageMagick wäre das wohl simpel, das ist aber nicht Bestandteil vom PHP von IP-Symcon, in sofern müsste man das irgendwie anders lösen.