Logo aufs Bild machen

Hallo wollt mal fragen wie das funktioniert wie es eigentlich alle Partyfotoseiten machen dass immer ihr Logo hinauf gemacht wird. Beispiel:
Mit PHP und der Gdlib

Kann man das Logo denn danach noch einmal ändern (als Admin) und kann es dann auch auf allen Bildern geändert werden?
Klar, wenn du zugriff auf den Quellcode hast.

Natürlich muss eine .jpg Datei ausgegeben werden ;)
Das ist dir überlassen, da bietet die Gdlib verschiedene Funktionen an.
 
Klar, wenn du zugriff auf den Quellcode hast.
Das passt glaub ich ned als Antwort.

https://www.youonweb.it/pictures/2/7052dac9f266e7843faf319350765a98.jpg
Es gibt grundsätzlich 2 Möglichkeiten, was mit obigem Link passiert:
  • dieses jpg-File liegt wirklich im Dateisystem (99,99%wahrscheinlich)

    Das bedeutet beim Hochladen des Bilds wurde es verändert und das Logo aufs Bild gemalt. Du kannst das Logo als Programmierer nur ändern, wenn du das ursprüngliche Bild als Sicherung abspeicherst. Das kostet aber doppelten Speicherung und wird wohl keiner machen.
  • dieses "jpg-File" ist kein jpg-File, sondern .jpg wird per Webserver auf ein (z.B. PHP-)Script umgeleitet (sehr sehr unwahrscheinlich)

    In diesem Fall wird das Logo on-the-fly immer wieder bei jedem Aufruf neu aufgedruckt. D.h. du arbeitest immer mit den Originalbilddateien, spart also Speicher und kostet unnötig Performance, jedes Mal neu aufzudrucken.
 
hmm nun hab ich zwei erfahrene Progger die hier irgendwie nicht die selbe Meinung vertreten. Wie ich das zumindest verstanden habe. Oder mbassus hast du das genau so wie theHacker es schreibt gemeint?
 
Ich denke er wird es genauso gemeint haben.

Ich würde tH insoweit zustimmen, dass on-the-fly-Generierung des Wasserzeichens ein absolutes don't ist. Speicherplatz ist heute so günstig, dass eine doppelte Speicherung (einmal mit und einmal ohne Wasserzeichen) nicht allzu viel kostet, solange es nicht gleich um zigtausend Bilder geht.
 
solange es nicht gleich um zigtausend Bilder geht.

Und auch dann ist eine weitere Platte in jedem Server günstiger als noch weitere Server anschaffen zu müssen, um immer on-the-fly zu kopieren, denn bei zigtausend bildern, hat man dutzende anfragen gleichzeitig, da bräuchte man dann schon ne kleine farm für die dynamische generierung

und warum eigentlich doppelt speichern? ich würde nur das bild mir watermark speichern
 
Und auch dann ist eine weitere Platte in jedem Server günstiger als noch weitere Server anschaffen zu müssen, um immer on-the-fly zu kopieren, denn bei zigtausend bildern, hat man dutzende anfragen gleichzeitig, da bräuchte man dann schon ne kleine farm für die dynamische generierung
Du gibst die Antwort selbst :)
und warum eigentlich doppelt speichern? ich würde nur das bild mir watermark speichern
Eine neue Platte, nur um Bilder zu speichern? Nein danke :) Ein paar MB mehr ist ja kein Aufwand und bekommt man bei jedem gescheiten Hoster, von daher kann man wenige Bilder ruhig noch doppelt speichern, aber bei vielen...
 
jup, flashas, hab ich übersehen, hmm, man könnte ja nur das mit watermark speichern und zudem als extra bild das kleine rectangle von dem originalbild wo nun das watermark sitzt^^
 
Ich habe dir mal hier was gebastelt und hoffe du kannst es nachvollziehen!

PHP:
<?
function make_thumbnail ($bild) //bild welches gebrandet werden soll
{
        $PicPathIn="bearbeitung/"; //wo liegt das bild?
        $PicPathOut="bearbeitung/"; //wo hin soll das fertige?
        $size=getimagesize($PicPathIn.$bild); //lese Bildaten ein
        $branding = 1; // Branding eingeschaltet
        $minbranding_breite = 100;        
        $minbranding_hohe = 50; 
        $breite=$size[0];
        $hoehe=$size[1];
        $max_breite = 200;
        $max_hoehe = 400;
        $neueBreite = $breite;
        $neueHoehe = $hoehe;
        while($neueBreite > $max_breite ||  $neueHoehe > $max_hoehe)
        {
        $neueBreite = round($neueBreite * 0.9);
                $neueHoehe = round($neueHoehe * 0.9);
        }

        if ($neueBreite < 1)
        {
                $neueBreite = 1;
        }

        if ($neueHoehe < 1)
        {
                $neueHoehe = 1;
        }

        if ($minbranding_breite > $neueBreite && $minbranding_hohe > $neueHoehe)
        {
                $neueBreite = $minbranding_breite;
                $neueHoehe = $minbranding_hohe;
                $branding = 0;
        }

        //-----> Branding laden
        //-----> Wenn ein Gif
        if($size[2]==1) {
                $altesBild=ImageCreateFromGIF($PicPathIn.$bild);
                $neuesBild=imagecreatetruecolor($neueBreite,$neueHoehe);
                $farbe1 = ImageColorAllocate ($neuesBild, 255, 255, 255);
                ImageFill($neuesBild, 0, 0, $farbe1);
                if ($branding == 1)
                {
                        imagecopyresampled($neuesBild,$altesBild,0,0,0,0,$neueBreite,$neueHoehe,$breite,$hoehe);
                } else
                {
                        imagecopyresampled($neuesBild,$altesBild,0,0,0,0,$breite,$hoehe,$breite,$hoehe);
                }
                imagecopyresampled($neuesBild,$pfeilBild,2,$neueHoehe - 18,0,0,80,16,80,16);
                ImageGIF($neuesBild,$PicPathOut.TN.$bild);
        }



        if($size[2]==2) {
        // JPG
                $altesBild=ImageCreateFromJPEG($PicPathIn.$bild);
                $neuesBild=imagecreatetruecolor($neueBreite,$neueHoehe);
                $farbe1 = ImageColorAllocate ($neuesBild, 255, 255, 255);
                ImageFill($neuesBild, 0, 0, $farbe1);
                if ($branding == 1)
                {
                        imagecopyresampled($neuesBild,$altesBild,0,0,0,0,$neueBreite,$neueHoehe,$breite,$hoehe);
                } else
                {
                        imagecopyresampled($neuesBild,$altesBild,0,0,0,0,$breite,$hoehe,$breite,$hoehe);
                }
                imagecopyresampled($neuesBild,$pfeilBild,2,$neueHoehe - 18,0,0,80,16,80,16);
                ImageJPEG($neuesBild,$PicPathOut."TN".$bild,90);
  }

       if($size[2]==3) {
        // PNG
                $altesBild=ImageCreateFromPNG($PicPathIn.$bild);
                $neuesBild=imagecreatetruecolor($neueBreite,$neueHoehe);
                $farbe1 = ImageColorAllocate ($neuesBild, 255, 255, 255);
                ImageFill($neuesBild, 0, 0, $farbe1);
                if ($branding == 1)
                {
                        imagecopyresampled($neuesBild,$altesBild,0,0,0,0,$neueBreite,$neueHoehe,$breite,$hoehe);
                } else
                {
                        imagecopyresampled($neuesBild,$altesBild,0,0,0,0,$breite,$hoehe,$breite,$hoehe);
                }
                imagecopyresampled($neuesBild,$pfeilBild,2,$neueHoehe - 18,0,0,80,16,80,16);
                ImagePNG($neuesBild,$PicPathOut."TN".$bild);
        }

        return true;

}

Aber anpassen musst du es dir selber. Es funzt mig gif/jpeg/png

Das Resultat sieht im Beispiel so aus:

7619Bleach1PNG


Bild + Branding!
 
Zuletzt bearbeitet:
Man sollte auch erwähnen, dass der Anteil, der durch das Branding neu erworbenen User gegenüber denjenigen, die es nervt, verschwondend gering ist. Die großen Bilderhoster machen so einen Unfug doch auch nicht oder kaum ...

@ ice-breaker: Hehe :)
 
Man sollte auch erwähnen, dass der Anteil, der durch das Branding neu erworbenen User gegenüber denjenigen, die es nervt, verschwondend gering ist. Die großen Bilderhoster machen so einen Unfug doch auch nicht oder kaum ...

Es macht aber jede Partyfotoseite.

Was ich mir überlegt habe was vielleicht auch funktionieren würde wär: Dass man die Bilder schon zweimal abspeichert aber die Bilder ohne Logo drauf werden in einem speziellen Ordner rein gemacht, den mir dann ein Programm immer leert und auf meine externe Festplatte schmeist. :-?
 
Was ich mir überlegt habe was vielleicht auch funktionieren würde wär: Dass man die Bilder schon zweimal abspeichert aber die Bilder ohne Logo drauf werden in einem speziellen Ordner rein gemacht, den mir dann ein Programm immer leert und auf meine externe Festplatte schmeist. :-?

Hast du denn soviele tausend Fotos das dies nötig ist ?
 
Ach so, du brauchst was für alle Bilder. Naja ich kann dir da nichts machen, da ich mich der GD von PHP bedient habe, und in C weis ich leider nicht, wie das zu realisieren wäre, aus andere Programme dafür zu nutzen.

Allerdings kannst du dir auch eine Bat bzw SH unter Linux mache, das Verzeinis durchlaufen und jedes Bild an den PHP interpreter Linken. Ist zwar nicht Professionell aber funzen würde es schon recht Problemlos. Ich wüsste sond kene Lösung, die sonst schnell zu realisieren wäre.

Soll das auf dem Server passieren? Dann mach dir doch einfach enen Cronjob.
 
Naja ich kann dir da nichts machen, da ich mich der GD von PHP bedient habe, und in C weis ich leider nicht, wie das zu realisieren wäre, aus andere Programme dafür zu nutzen.
Hat wer was von C gesagt ? :hö: *nochmal den Thread durchseh*

Die GD-Lib gibts doch auch für C afaik.

Sonst wenn man per Shellscript was machen will, gibts auch noch ImageMagick, dass du bequem verwenden kannst.
 
habt ihr denn jetzt eine brauchbare Lösung gefunden :?: :mrgreen:

suche sowas auch, für meine Game-Site, um die Screenshots und Co mit einem Branding zu versehen