Ankündigung

Einklappen
Keine Ankündigung bisher.

Grafik mit imageaffine verzerren

Einklappen

Neue Werbung 2019

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

  • Grafik mit imageaffine verzerren

    Ich versuche in PHP eine grafische Verzerrung zu erzeugen um die Grafiken nicht immer mit Photoshop erzeugen zu müssen. Dazu soll eine Grafik perspektivisch verzerrt auf einer 2. Grafik abgelegt werden. Die benötigte Funktion zum Verzerren dürfte die imageaffine sein. Leider ist diese Funktion nicht beschrieben und Google hilft mir da nicht weiter. Ich weiss weder welche Zahlenbereiche gültig sind, noch welches der 6 Attribute für was gut ist.

    Erreicht werden soll folgende Verzerrung, Werte von Photoshop nach dem Verzerren übernommen.
    Zentrieren: Zentriert
    Übersetzen: 0,3Pixel, -226 Pixel
    Breite: 74,6%
    Höhe: 84,9%
    Neigen:-23,4°, 0°
    Winkel: 42,1°
    Verzerren: 0%, 0%

    Das Bilder erzeugen, kopieren, skalieren etc. ist kein Problem. Nur mit dem Verzerren hab ich mich noch nie auseinander gesetzt, da dies bei einer normalen Bildausgabe kaum benötigt wird. Ich hoffe hier kann mir jemand bei helfen.

    DANKE

  • #2
    so gehts wohl mit css:
    https://developer.mozilla.org/de/docs/Web/CSS/transform

    aber imagemagik und eingeschränkt auch gd machen das auch, gabs leztens nen thread.

    Kommentar


    • #3
      Danke.
      Das mit CSS ist interessant. Nur leider für meinen Zweck nicht nutzbar.
      Mir ist wichtig das eine speicherfähige Grafik erzeugt wird, die dann weiterverwendet werden kann. Imagemagik läuft bei mir (1&1) nicht. Daher der Griff zum GD.

      Kommentar


      • #4
        @schnitzer:
        Ich glaube moma meinte auch eher die Reihenfolge der Kernel-Transformation (das 6-Stellige Array, was die Transformation beschreibt). Die funktioniert mit der PHP-Funktion annähernd gleich.

        Du musst also an die PHP Funktion ein Array mit 6 Werten geben, das die Transformation, die du möchtest so beschreibt, wie es in dem CSS-Artikel erklärt ist. Beispiel (Bilder brauchst keine, die werden generiert)
        PHP-Code:
        <?php 

        if (!function_exists('imageaffine')) 

        echo 
        'FUNCTION NOT DEFINED IN THIS VERSION OF PHP'
        exit; 

        $select 0// mt_rand(0, 7); 
        $base_img 'affine.png'
        $tgt_img1 'triangle1.png'
        $tgt_img2 'triangle2.png'

        $arr_affine = [ 
            
        // 6 Werte beschreiben die Transformation
            
        0.10.10.10.800],
        ];

        $RSR_base imagecreatetruecolor(400300); 
        $w imagesx($RSR_base); 
        $h imagesy($RSR_base); 

        $arr_clip = [ 'x' => 0'y' => 0'width' => $w'height' => $h ]; 

        $fillcolor imagecolorallocate($RSR_base000); 

        imagefill($RSR_base10,10$fillcolor); 

        imagepng($RSR_base$base_img); 

        $drawcolor imagecolorallocate($RSR_base25500);  

        $triangle = [ 505050150200150 ]; 
        $points 3

        imageantialias($RSR_base1); 

        $drawtriangle imagefilledpolygon($RSR_base$triangle$points$drawcolor);

        imagepng($RSR_base$tgt_img1);



        $RSRaff2 imageaffine($RSR_base$arr_affine[$select], $arr_clip); 

        imagepng($RSRaff2$tgt_img29); 

        ?> 

        SUPPORT IMAGE<br><br> 
        <img src="<?php echo $base_img?>" alt="*" /><br><br> 

        BASE IMAGE<br><br> 
        <img src="<?php echo $tgt_img1?>" alt="*" /><br><br> 

        RESULT IMAGE<br><br> 
        <img src="<?php echo $tgt_img2?>" alt="*" />
        Je nachdem, was für eine Transformation erzeugt werden soll, ist es mit einer einfachen Funktion aber nicht getan. Affine ist meines Wissens nach (ich bin kein Experte) nur in der Lage, lineare Transformationen zu erstellen, heißt im Klartext: "Glatte" Verzerrungen der Kanten / Ecken sind möglich, Warp-Transformationen, wie z.B. http://chenxing.name/fun/imgwarp-js/ sind nicht ohne weiteres machbar.

        Ich habe den Algrithmus aus dem Link (Grid-Warp) mal auf Java portiert, das war nicht soo komplex. Also wenn du nicht lineare Warp-Transformationen willst, benötigst du entweder eine eigene Library dafür, falls es sowas gibt (packagist.org) oder musst etwas über die normalen Funktionen hinaus implementieren. Allerdings erzeugt das sehr viel Last. Bildberechnungen sind in PHP nicht wirklich effizient.
        Tutorials zum Thema Technik:
        https://pilabor.com
        https://www.fynder.de

        Kommentar


        • #5
          @schnitzer, tut es dann nicht auch ein cloudserver? Google AppEngine kann jetzt auch php und hat (glaube ich) ein recht großzügiges Freikontingent. Weiss das jemand besser?

          Kommentar

          Lädt...
          X