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!
imageline problem
Einklappen
X
-
1. eine gerade linie ist doch auch nur ein rechteck => imagefilledrectangle()
2. versteh nicht wirklich deine frage
Einen Kommentar schreiben:
-
[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
Einen Kommentar schreiben:
-
versuchs mal damit:
PHP-Code:$borderColor = imagecolorallocate($can_img,0,0,0);
Einen Kommentar schreiben:
-
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, $abc, 0, 0, $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, $def, 0,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>";
(konstruktiven) Anregungen dankbar.
P.S. mit LESEN kam ich bis hier....
Danke
BrunoStichworte: -
Einen Kommentar schreiben: