Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Kreis aus Bild? Aussenfläche weiß?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Kreis aus Bild? Aussenfläche weiß?

    Hallöchen erstmal, bin neu hier, aber schon ewig passiver Leser.
    Jetzt allerdings ist der Zeitpunkt gekommen, wo ich mit meinem mehr oder weniger vorhanden Wissen um die Image-Funktionen an die Grenzen gerate.

    Also folgendes (Jedes gutes Problem fängt mit also an!):

    Ich habe ein rechteckiges Bild, aus dem eim Kreis ausgeschnitten (!) werden soll, und nur dieser angezeigt werden soll. Also der Ausschnitt ist ein Kreis, die Aussenfläche einfach nur weiß.

    Bisher hab ich mir als "Notlösung" folgendes zusammengefrickelt (Bin auch tierisch stolz drauf, dass ich das geschafft hab ):

    PHP-Code:
    $source_image imagecreatefromjpeg($this->getThumb());
    $info getimagesize $this->getThumb() );
    $ww $info[0] / 2;
    $hh $info[1] / 2;
    if (
    $info[0] <= $info[1]) {$wwohh $info[0];} else {$wwohh $info[1];}
    $weiss   imagecolorallocatealpha ($source_image255255255,50);
    imagefilledellipse $source_image $ww $hh $wwohh $wwohh $weiss );
    imagepng($source_image$this->getThumb()); 
    Kurz zur Erklärung:

    Ich hole mir Breite und Höhe des Bildes, teile die jeweils durch zwei, jetzt hab ich den Mittelpunkt des Bildes. Die kleine if Abfrage gibt mir mit $wwohh die kürzeste Seite des Bildes wieder. Das ist wichtig, weil der Kreis soll ja nicht über das Bild hinaus gehen. Dann hab ich mir ein halbtransparentes weiß definiert. Als nächstes kommt ein Kreis (also eigtl ne Ellipse aber is ein Kreis ) auf das Bild, mit dem Mittelpunkt, den ich vorher definiert hab und Höhe & Breite jeweils die kürzeste Seite des Bildes.

    Das Funktioniert auch ganz gut, aber ab hier bin ich am verzweifeln. Ich hätte das gerne, dass dieser Kreis quasi nur den Ausschnitt zeigt, aber die restliche Aussenfläche weiß wird, also quasi den Kreis invertieren, umkehren. Krieg ich das irgendwie hin?

    Ich war natürlich auch nicht faul und habs schon probiert mit border zu lösen. Also ein Bild mit 300x300 bekommt dann den borderradius 150 und es ist ein perfekter Kreis, wie ich das möchte. Das Problem ist leider, dass nicht jede Datei ein Quadrat ist und deswegen wird der Kreis kein Kreis mehr :/

    Würde mich über Denkanstöße tierisch freuen!
    Grüße Heynrich

  • #2
    masking heisst das Stichwort:

    und das ist dein Link:
    http://komunitasweb.com/2009/02/php-...image-with-gd/

    Kommentar


    • #3
      Ach herjee, wie peinlich, danke für die superschnelle Antwort Das ist genau das, was ich suche!
      Jede menge Stunden Arbeit für umsonst ... naja immerhin jede Menge bei gelernt

      Nochmal vielen dank!

      Kommentar


      • #4
        Immer gerne, jetzt nur noch auf erledigt klicken ?

        Kommentar


        • #5
          Schon passiert

          Kommentar


          • #6
            Muss leider nochmal aufmachen

            Also so ganz scheint der Link aber nicht das zu machen, was ich vorhatte. Egal wie ich daran rumschraube, es kommt ein roter Kreis auf Transparenz dabei raus. Auch bei dem Origninalcode aus dem Beitrag. Dachte ich hätte beim Umarbeiten erst einen Fehler gemacht, aber das liefert auch nur einen roten Kreis mit Transparenz

            PHP-Code:
            <?php
            // load the image you want to crop
            $image imagecreatefrompng('sample.png');
             
            $width imagesx($image);
            $height imagesy($image);
             
            // create masking
            $mask imagecreatetruecolor($width$height);
            $transparent imagecolorallocate($mask25500);
            imagecolortransparent($mask$transparent);
            imagefilledellipse($mask$width/2$height/2100100$transparent);
             
            imagecopy($image$mask0000$width$height);
            imagecolortransparent($image$red);
            imagefill($image,0,0$red);
             
            // output and free memory
            header('Content-type: image/png');
            imagepng($image);
            imagedestroy($image);
            imagedestroy($mask);
            ?>
            Liefert folgende Ausgabe:


            Also leider nicht so wie im Beispiel beschrieben. Jemand eine Idee woran das liegen könnte?

            Kommentar


            • #7
              naja .. solange

              $transparent = imagecolorallocate($mask, 255, 0, 0); mich nicht "betrügt" - ist das ROT ... (R , G , B ) *g*

              ich hab jetzt auch mal in das Original geschaut .. wo ist bitte $red definiert ? oder ist das eine vordefinierte Farbe ?...

              vielleicht hängt es ja daran

              Kommentar


              • #8




                scnr

                Kommentar


                • #9
                  hm ich hab das jetzt mal so aufgebaut wie in der Vorlage - funktioniert perfekt ...


                  nimmst du evtl ein Bild mit veränderter Palette oder so ?(Gif) ???

                  oder arbeitest du mit Internetexplorer älter als IE8 ? der 6er hatte Probleme mit Transparenzen ...

                  Kommentar


                  • #10
                    Ne, ich benutz Firefox 16 und es werden ja auch transparenzen dargestellt, nur sollte laut diesem Code ja kein roter Kreis auf Transparenz erscheinen, sondern ein Ausschnitt in Kreisform des ursprünglichen Bildes.

                    Ich bin wirkich verwirrt ....

                    EDIT: Okay, jetzt hab ich es gelöst!

                    Es geht nicht mit
                    PHP-Code:
                    imagecopy($image$mask0000$width$height); 
                    aber mit
                    PHP-Code:
                    imagecopymerge($image$mask0000$width$height100); 
                    Juhuuu endlich =) Danke für die vielen Hilfen!

                    Kommentar

                    Lädt...
                    X