Ankündigung
Einklappen
Keine Ankündigung bisher.
Captcha_k313
Einklappen
Neue Werbung 2019
Einklappen
X
-
Ich weiß, ich bin da übertrieben konservativ und voll nicht 2.0, aber ich denke, ein, zwei erklärende Sätze würden sehr zum Verständnis beitragen.
Andererseits: http://www.html.de/php/40790-captcha...tml#post303667
Aus manchen Posts werde ich einfach nicht schlau. Aber das ist ja auch nicht schlimm.
Edit: Abgesehen davon scheint das Script aber ganz schick zu sein.
Kommentar
-
Was um "6" und "9" geht - die beide konnen nicht meher alse 40 grad umgedreht werden.
and wie gewunscht - zwei sätze zum erklärung:
natürlich ist das nur ein beispiel für anfang. es würde nicht schlecht das bild sonst bischen transformieren usw...
Zum beispiel, wollte ich jeder simbol auf zwei teilen brechen, und ich hab's geschafft, aber nur wenn ich jeder pixel ablese und uberschreibe. dass kostet viel zeit, fast 100 mal meher. Deswegen wollte ich die linien und curven noch vor dem writung per mathematik und geometrie ausrechnen, aber... zum geometrie habe ich nich viel lust...
freue mich wenn jeman erklärt wie kann man die koordinaten von punkt "C" finden.
die koordinaten von "A" und "B" und auch ihre winkeln habe ich, und die linie "O-C" ist keine meridian für "A-B"
__________________________________
bloße code
PHP-Code:$micro=microtime(true);
ini_set('display_errors', 0);
error_reporting(0);
//===
//===
header("Content-type: image/jpeg");
header("Pragma: no-cache");
header("Expires: Mon, 25 Jul 2011 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s", 10000) . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
$arr=array(
array(180,0,20,20,10,0,2000,180,0,40,40,10,0,2000,0,180,20,20,-10,0,2000,0,180,40,40,-10,0,2000,10,-20,1000,-10,-20,10,-10,1000,-10,-10,10,10,1000,-10,10,10,20,1000,-10,20),
array(-30,10,1000,-15,-5,1000,-5,-5,1000,-5,0,1000,30,0,1000,30,10,1000,-30,10),
array(180,0,10,10,-12,-10,2000,40,-180,35,35,-12,2,2000,40,-180,15,15,-12,2,2000,-7,7,1000,18,-18,1000,30,-18,1000,30,20,1000,21,20,0,-180,10,10,21,15,2000,21,10,1000,21,-7,1000,-2,16),
array(-10,160,11,11,13,-14,2000,165,-78,20,20,10,0,2000,165,-38,40,40,10,0,2000,180,0,10,10,-12,-10,2000,38,-180,35,35,-12,2,2000,90,180,15,15,-12,2,2000,0,2,1000,-5,2),
array(-5,5,1000,10,-10,1000,10,5,1000,-5,5,-30,15,1000,5,-20,1000,20,-20,1000,20,5,1000,30,5,1000,30,15,1000,20,15,1000,20,20,1000,10,20,1000,10,15,1000,-30,15),
array(-10,160,11,11,13,-14,2000,165,-90,20,20,10,0,2000,165,-90,40,40,10,0,2000,180,0,10,10,-20,15,2000,-10,0,1000,-10,-5,1000,-20,-5,1000,-20,10,-20,20,1000,-30,20,1000,-30,-15,1000,0,-15,1000,0,0),
array(-90,-90,20,20,10,0,2000,-135,-78,40,40,10,0,2000,-9,4,1000,-25,20,1000,-30,20,1000,-30,12,1000,-4,-14),
array(180,0,10,10,-20,-15,2000,-20,-20,1000,-30,-20,1000,-30,20,1000,-2,20,1000,30,-12,1000,30,-20,1000,25,-20,1000,-5,10,1000,-20,10,1000,-20,-10),
array(0,0,20,20,10,0,2000,-134,-38,40,40,10,0,2000,38,154,35,35,-12,2,2000,0,0,15,15,-12,2,2000,4,7),
array(0,0,20,20,-10,0,2000,45,102,40,40,-10,0,2000,9,-4,1000,25,-20,1000,30,-20,1000,30,-12,1000,4,14),
);
$scale=2;
$anglea=true;
$intlen=strlen($int=substr(rand(10000000,99999999),rand(0,2),rand(5,6)));
$ifon=imagecreatetruecolor(240*$scale,80*$scale);
$c0=imagecolorallocate($ifon,255,255,255);
$c1=imagecolorallocate($ifon,0,0,0);
//===
imagefill($ifon,0,0,$c0);
$posiz=rand(0,220*$scale-$intlen*40*$scale+8*$intlen*$scale);
for($j=0,$i=$intlen;$i>0;$j++) {mycharwrite($int{$j},$posiz,$scale); $i--; $posiz+=rand(30*$scale,240*$scale-$posiz-$i*40*$scale);}
function mycharwrite($char,$x,$scale) {
global $ifon, $c0, $c1, $anglea, $arr;
$x+=20*$scale;
$y=rand(30*$scale,50*$scale);
imagesetthickness($ifon,1);
if($anglea && $char!=6 && $char!=9 && (($angleb=rand(-179,180))<-45 || $angleb>45)) {$anglea=false;}
else {$angleb=rand(-40,40);}
$scale=rand($scale*140,$scale*70)/100;
$angle=deg2rad($angleb);
$i=count($arra=$arr[$char])-3;
list($x1,$y1)=myangle($arra[$i+2]*$scale,$arra[$i+1]*$scale,$angle);
for(;$i>1;$i--) {
if(($a=$arra[$i])==1000) {
$xa=$x1;
$ya=$y1;
list($x1,$y1)=myangle($arra[$i-1]*$scale,$arra[$i-2]*$scale,$angle);
imageline($ifon,$x+$xa,$y+$ya,$x+$x1,$y+$y1,$c1);
$i-=2;
}
elseif($a==2000) {
list($x1,$y1)=myangle($arra[$i-1]*$scale,$arra[$i-2]*$scale,$angle);
imagearc($ifon,$x+$x1,$y+$y1,$arra[$i-3]*$scale,$arra[$i-4]*$scale,$arra[$i-5]+$angleb,$arra[$i-6]+$angleb,$c1);
$i-=6;
}
else {list($x1,$y1)=myangle($a*$scale,$arra[$i-1]*$scale,$angle); $i--;}
}
}
function myangle($x,$y,$angle) {
$a=atan2($y,$x)+$angle;
$b=sqrt(pow($x,2)+pow($y,2));
return array(cos($a)*$b,sin($a)*$b);
}
//===
imagestring($ifon,5,10,5,"created: ".substr(microtime(true)-$micro,0,6)." sec.",$c1);
imagejpeg($ifon);
imagedestroy($ifon);
exit;
Signaturrrrrrr
Kommentar
-
freue mich wenn jeman erklärt wie kann man die koordinaten von punkt "C" finden.
die koordinaten von "A" und "B" und auch ihre winkeln habe ich, und die linie "O-C" ist keine meridian für "A-B"
Kommentar
-
Bau doch mal bitte nen "Licht an!"-Knopf auf deiner Webseite ein, die Wirkt auf nem LED-Display wie nen Multi-Source-Laser der mir die Netzhaut glätten will.[URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].
Kommentar
-
Was du machen willst, nennt sich wohl Clipping.
- http://de.wikipedia.org/wiki/Clippin...putergrafik%29
- http://de.wikipedia.org/wiki/Algorit...erland-Hodgman
Ich würde die einzelnen Zahlen-„Polygone” vor der Translation und Rotation clippen.
Für die Bögen wirst du dir da aber etwas überlegen müssen. (Dazu kann ich spontan nichts sagen. Das sollte aber auch zu schaffen sein. Könnte eine ganz interessante Aufgabe sein.)
Für die Transformationen empfehlen sich dann prinzipiell Matrizen. Die solltest du dir in jedem Fall mal ansehen. Weiß nicht, ob du damit sowieso umgehen kannst, aber das ist hinzukriegen und überaus nützlich.
- http://en.wikipedia.org/wiki/Transfo...in_2D_graphics
Die kannst du miteinander multiplizieren und erhältst dann eine einzige Matrix, die du auf die Punkte des Polygons anwenden kannst, um sie an die richtigen Stellen zu bekommen.
Das sollte auch problemlos mit Kreisbögen funktionieren, wenn du die beiden Endpunkte bestimmst. Die Schwierigkeit ist dort das Clipping.
PS: Ich kann nicht beurteilen, inwieweit du sowas schon machst. Dein Code ist etwas unlesbar. Der ist eigentlich in keiner Form, mit der andere Programmierer wirklich arbeiten könnten.
Kommentar
-
danke fürs hilfe!
genau das wollte ich - clippen vor der translation, und beim curven geht's einfacher glaube ich. ich habe die center-koordinaten von "imagearc" und alles was ich muss, ist die imagearc bis zum gleichen winkel des "O-C" writen, dann Abbruch, und weiter schon mit differenz-center-koordinaten imagearc weiter writen... so denke ich mal.
Aber ehrlich zu sagen, habe ich, nexte paar wochen vielleicht, keine zeit dafür (bin beschäfftig mit andere sache) spähter fahre ich fort...
_________________________
na ja, mit den curven falsch gequatscht. So was geht nur wenn die center-coordinaten auf den "O-C" liegen... bleibt für mich als eine interessante Aufgabe.Signaturrrrrrr
Kommentar
-
Alsooooo... So genannte "paar Wochen" mussen jetzt endlich vorbei werden.
Lasse meine Scripten nach und nach freigeben, mit etwas, was man manchmal als die Beschreibung nennen kann.
http://wp-de.k313.net/
Signaturrrrrrr
Kommentar
Kommentar