imageline problem

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

  • imageline problem

    Hi,

    ich sitze hier an einer kniffligen Aufgabe:

    Es soll von einem Bild ein Ausschnitt bestimmt werden (á la Passepartout).
    Damit wird dann ein neues Bild generiert. Man kann eine Vergrösserung
    einstellen ,die Grösse des neuen Bildes und die Startpunkte des
    Ausschnittes. Alles klappt wunderbar.
    Ich will jetzt nur noch einen Rahmen in der Kopie des Originalbildes haben,
    um dem User anzuzeigen, welchen Ausschnitt er gerade gewählt hat.
    Daran scheitere ich gerade.
    Alles andere habe ich dank RTFM hinbekommen, aber nun hapert es an
    meinen Ideen.

    Das Script macht keinen Rahmen! Ich bekomme es nicht hin.


    So sieht es bis jetzt aus:

    http://www.phantasmedia.de/test/bild...0&tx=80&ty=120

    Und das ist der (im wachsen befindliche) Code:
    Ich habe Ihn so geändert, dass er erst mal funzt, aber keinen Rahmen
    zeichnet. Wenn ich das probiere, klappt nix mehr.

    PHP-Code:
    $generalsrc=$image//the image to resample, resize and iconaize


    $abc imagecreatefromjpeg("$generalsrc"); 
    //$final_thumbwidth =round((imagesx($abc) / $mag)-"0.1");
    $final_thumbwidth =$mag;
    //$final_thumbwidth = round((imagesx($abc))-"0. 1");
    $final_thumbheight $final_thumbwidth;

    $def imagecreatetruecolor($final_thumbwidth$final_thumbheight); 
    $src_mx round((imagesx($abc) / 2)-"0.1"); // middle x point of the image
    $src_my round((imagesy($abc) / 2)-"0.1"); // middle y point of the image
    $src_x = ($src_mx 2);
    $src_y = ($src_my 2);
    $src_sq = ($src_x >= $src_y)?$src_y:$src_x//used to define the best size for a square cut of the image
    $pl = ($src_x >= $src_y)?"1":"2"//define if the image is portait or landscape
    $strt_pntx = ($pl=="1")?round(($src_x-$x)-"0. 1"):round(($src_y-$y)-"0. 1");  //defines the x start point
    $strt_pnty = ($pl=="2")?round(($src_x-$x)-"0. 1"):round(($src_y-$y)-"0. 1");  //defines the y start point
    //$strt_pntx = ($pl=="1")?round(($src_mx-$x)-"0. 1"):round(($src_my-$y)-"0. 1");  //defines the x start point
    //$strt_pnty = ($pl=="2")?round(($src_mx-$x)-"0. 1"):round(($src_my-$y)-"0. 1");  //defines the y start point

    imagecopyresized($def$abc00$strt_pntx$strt_pnty$final_thumbwidth$final_thumbheight$src_sq$src_sq);

    //$overlay_img = imagecreatefromPNG("button_edit.png"); //NOTE use png for this
    //$src_w = ImageSX($overlay_img);
    //$src_h  = ImageSY($overlay_img);
    //$src_w = 80;
    //$src_h  = 120;
    $src_w $tx;
    $src_h  $ty;

    $can_img imagecreatetruecolor ($src_w$src_h);
    //$bg_img = imagecreatetruecolor ($src_w, $src_h);
    //$black = imagecolorallocate ($bg_img, 0, 0, 0);
    //ImageColorTransparent($bg_img , $black);
    $borderColor=255;

           
    imageline($can_img,$src_x-$x,$src_y-$y,$src_x-$x+$tx,$src_y-$y,$borderColor);
           
    imageline($can_img,$src_x-$x+$tx,$src_y-$y,$src_x-$x+$tx,$src_y-$y+$ty,$borderColor);
           
    imageline($can_img,$src_x-$x+$tx,$src_y-$y+$ty,$src_x-$x,$src_y-$y+$ty,$borderColor);
           
    imageline($can_img,$src_x-$x,$src_y-$y+$ty,$src_x-$x,$src_y-$y,$borderColor);
           
    imagecopy($can_img$def0,0,0,0$x$y);
    //imagecopymerge($can_img, $overlay_img , 0,0,0,0, ImageSX($overlay_img), ImageSY($overlay_img),100); //Imagecopy won't work, you must used imagecopymerge
    //imagedashedline ( $can_img, $src_x-$x, $src_y-$y, $src_x-$x, $src_x-$x, 200);

    imagejpeg($can_img,"merge_$generalsrc",100);
    //imagejpeg($def,"merge2_$generalsrc",100);

    //imagedestroy($overlay_img);
    imagedestroy($can_img);
    imagedestroy($abc); 
    imagedestroy($def); 

    print 
    "<HTML><HEAD><TITLE>test</TITLE></HEAD><BODY>
    original:<hr><img src=\"
    $generalsrc\" width=\"300\"><br><br><br>new:<hr><img src=\"merge_$generalsrc\">
    <br>width = 
    $src_x
    <br>height = 
    $src_y
    <br>mdlw = 
    $src_mx
    <br>mdlh = 
    $src_my
    <br>sqr = 
    $src_sq
    <br>pl = 
    $pl
    <br>start point x = 
    $strt_pntx
    <br>start point y = 
    $strt_pnty
    </BODY></HTML>"

    Wenn jemand eine Idee hat.... nur raus damit! Ich bin für alle
    (konstruktiven) Anregungen dankbar.

    P.S. mit LESEN kam ich bis hier....

    Danke
    Bruno
    1402: Für einen Wimpernschlag der Zeit herrschte Gerechtigkeit auf Nord- und Ostsee...

  • #2
    versuchs mal damit:
    PHP-Code:
    $borderColor imagecolorallocate($can_img,0,0,0); 
    ausserdem musst du für die linie kein neues image generieren, die kannst du direkt in die andere source malen.
    Kissolino.com

    Kommentar


    • #3
      [GD]

      Stimmt!
      Ich habe es hinbekommen...
      Nur das die Linienstärke bei imageline nicht definierbar ist...
      Gibt es nicht etwas anderes? Was etwas eleganter ist?
      Ohne mehrmals 1 Linie zu zeichnen?
      Ich dachte an:

      Bildgrösse ermitteln, check ob Landscape oder Portrait, 1% von längster
      Seite errechnen und einen Rahmen ziehen mit dieser "Strichstärke" in der
      Dimension des Thumbnails.

      Problem hierbei:
      Es wird ein Bildausschnitt mit imagecopyresize gemacht.Der ist
      quadratisch wegen der verzerrung und wird je nach vergrösserungsfaktor
      $mag gemacht. Dann wird ein Bild gemacht mit den Massen des Thumbnails und der Bildauschnitt mit imagecopy eingefügt.
      Wenn ich jetzt die Masse des Thumbs auf mein Originalbild lege, um dem User zu zeigen welchen Ausschnitt er hat, so wird das mit den Massen des Thumbs gemacht, also es stimmt nur der Anfangspunkt (Origin).
      Es ist irgendwo ein Denkfehler...



      Hat jemand so etwas schon mal gemacht oder weiss wie es geht?

      Ich bin ratlos...

      Bruno
      1402: Für einen Wimpernschlag der Zeit herrschte Gerechtigkeit auf Nord- und Ostsee...

      Kommentar


      • #4
        1. eine gerade linie ist doch auch nur ein rechteck => imagefilledrectangle()
        2. versteh nicht wirklich deine frage
        Kissolino.com

        Kommentar


        • #5
          Also:
          ich will dass der User ein Bild uploaded. Davon soll er einen Ausschnitt
          wählen. Daraus wird ein Thumb erzeugt und in z.B. 80x120, je nach
          Auswahl, dargestellt. Mit den Zoomfaktor $mag kann er die Vergröserung/
          Verkleinerung einstellen. Das klappt auch alles.
          Jetzt mein Problem:
          Wie erzeuge ich einen Rahmen im upgeloadeten Bild, der dem User zeigt,
          welchen Teil er gerade in der Thumbvorschau sieht.

          Den Origin setzt das Script richtig. Die Schwierigkeit liegt darin, den
          angezeigten Rahmen mit den Dimensionen des Thumbs bzw des darin angezeigten Ausschnittes zu verbinden.
          Ich bekomme immer einen 80x120 Rahmen, obwohl das nicht mit dem
          angezeigten Ausschnit übereinstimmt.
          Mit dem Vergrösserungsfaktor stelle ich ja einen grösseren als den
          angezeigten Ausschnitt ein (in der aktuellen Einstellung des Links )

          Das mit imagline=>imagerectangle klappt. Danke!
          Zuletzt geändert von bruno123; 17.05.2004, 07:27.
          1402: Für einen Wimpernschlag der Zeit herrschte Gerechtigkeit auf Nord- und Ostsee...

          Kommentar

          Lädt...
          X