Webhilfe.info/board

Normale Version: Code im Bild
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Da vor einigen Tagen ja bereits jemand ein Problem hatte mit einem Gästebuch, wo sich ein Bot eingeklingt hatte, habe ich mir überlegt mal ein eigenes Script zu basteln welches, mir ein Bild mit einem Code erzeugt.

Vorab sei gesagt, der Code ist nicht so schön wie greg seiner, aber es geht mir in erster Linie nicht darum ob der Code schön ist sondern darum, dass er funktioniert. Wenn ich den dann auch noch verstehe ist alles perfekt. Biggrin
Ich habe keine großen Kommentationen vorgenommen, wer etwas nicht versteht, der möge fragen. Vielleicht verschieb ich diesen Code auch ins Tutorialforum und erläutere dort ein wenig die Funktionsweise.

Aber nun mal zum Script. Dieses Script ist eine normale Funktion die 3 Parameter benötigt. Was die 3 Parameter bezwecken bzw. wozu sie da sind steht ganz oben als Kommentar. Das Script ist so aufgebaut, dass es von alleine ausrechnet, ob die Anzahl der Zeichen in das Bild passen, werden also mehr Zeichen angegeben als das in das Bild passen, so wird das ganze Script abgebrochen. Eine entsprechende Fehlermeldung wird dann angezeigt.

Zurückgegeben wird ein Array welches 2 Werte beinhaltet. Einmal das Bild und ein mal den Code der auf dem Bild zu dargestellt wird. Diesen Code kann man dann in eine Session schreiben oder was auch immer.

Lange Rede kurzer Sinn, hier erstmal das Script.
PHP-Code:
/*
########### image.php ############
#                                #
#   Autor:  Virus / Carsten      #
#   Email:  virus@webhilfe.info  #
#   Datum:  05.03.2006           #
#                                #
# Funktion fügt einem vorgegeben #
#    Bild einen Code hinzu.      #
#                                #
##################################


==> $code_laenge --> Anzahl der Zeichen die angezeigt werden

==> $codierung --> Welche Zeichen sollen angezeigt werden
      = 0  --> Anzeige von Buchstaben und Zahlen
      = 1  --> Anzeige von Buchstaben
      = 2  --> Anzeige von Zahlen

==> $image --> Bild auf dem der Code angezeigt wird (mit Ordnerangabe)

jpg und gif Bilder sind erlaubt
*/
  
$no_image '<b>Fehlermeldung:</b> Beim öffnen des Bildes ist ein Fehler aufgetreten.<br><br><b>Ursache:</b> Das Bild existiert nicht!<br><br><b>Vorschlag für Fehlerbehebung:</b> korrekten Pfad angeben bzw. Bild hochladen';

  
$wrong_image '<b>Fehlermeldung:</b> Bild kann nicht verwendet werden.<br><br><b>Ursache:</b> Das angegeben Bild ist kein .jpg bzw. .gif Bild.<br><br><b>Vorschlag für Fehlerbehebung:</b> Bild vom Typ .jpg bzw. vom Typ .gif angeben';

  
$wrong_image_size '<b>Fehlermeldung:</b> Bild kann nicht verwendet werden.<br><br><b>Ursache:</b> Das bild ist höher als breit.<br><br><b>Vorschlag für Fehlerbehebung:</b> Bild angeben, welches breiter als hoch ist';

  
$wrong_code_laenge '<b>Fehlermeldung:</b> Falsche Code-Länge angegeben.<br><br><b>Ursache:</b> Das Bild ist zu schmal bzw. es wurden zuviele Zeichen angegeben.<br><br><b>Vorschlag für Fehlerbehebung:</b> Bild verbreitern oder eine geringere Code-Länge angeben';

  
$image_create_false '<b>Fehlermeldung:</b> Bild konnte nicht erzeugt werden.<br><br><b>Ursache:</b> Eventuell unterstützt der Server diese Funktion nicht oder die CHMOD Rechte sind falls.<br><br><b>Vorschlag für Fehlerbehebung:</b> GD-Bibliothek Version 1.6 muss mindestens vorhanden sein, CHMOD Rechte auf min. 644 stellen';

  function 
image_code($code_laenge,$codierung,$image)
  {
    global 
$no_image;
    global 
$wrong_image;
    global 
$wrong_image_size;
    global 
$wrong_code_laenge;
    global 
$image_create_false;

    
$code '';
    
$buchstaben range('A''Z');
    
$ziffern range(09);

    if(!
file_exists($image))
      die(
$no_image);

    
$image_daten getimagesize($image);

    if((
$image_daten[2] != 1) and ($image_daten[2] != 2))
      die(
$wrong_image);

    if(
$image_daten[0] < $image_daten[1])
      die(
$wrong_image_size);

    
$beschreib_flaeche = ($image_daten[0] - 10) / 10;
    if(
$beschreib_flaeche $code_laenge)
      die(
$wrong_code_laenge);

    if(
$image_daten[2] == 1$bild ImageCreateFromGIF($image);
    if(
$image_daten[2] == 2$bild ImageCreateFromJPEG($image);

    
$erste_x_position = ($image_daten[0] - 5);
    
$bereiche $code_laenge 1;

    for(
$i=1;$i<=$code_laenge;$i++)
    {
      
srand((double)microtime()*10000000);

      if(
$codierung == 0)
      {
        if(
rand(0,1) == 0$zeichen $buchstaben[rand(0,25)];
        else 
$zeichen $ziffern[rand(0,9)];
      }
      elseif(
$codierung == 1$zeichen $buchstaben[rand(0,25)];
      elseif(
$codierung == 2$zeichen $ziffern[rand(0,9)];

      
$code .= $zeichen;

      
$neue_x_position = (($image_daten[0] / $bereiche) * $i) - 5;
      
$neue_y_position rand(5,$image_daten[1] - 20);

      
ImageString($bild,10,$neue_x_position,$neue_y_position,$zeichen,1);
    }

    if(
Imagepng($bild,'images/bild.png'))
      
$status[0] = '<img src="images/bild.png" '.$image_daten[3].'>';
    else
      die(
$image_create_false);

    
ImageDestroy($bild);

    
$status[1] = $code;

    return 
$status;
  }

  
$image image_code(6,0,'images/bild.jpg');
  echo 
$image[0].'<br>'.$image[1]; 
Ich habe es mal hochgeladen um zu zeigen das es auch funzt. http://www.webhilfe.info/virus/image_code/image.php

Wer Verbesserungsvorschläge oder Anregungen hat der möge sich melden.
Ich möchte meine Klasse ohnehin nochmal überarbeiten, dass passt mir so nicht.

Ich finde dein Script gut, es tut ja das was es soll. Jedoch finde ich es unschön die {} bei if's wegzulassen.

Übrigens weis ich durch dein Script warum es bei mir Probleme gab Wink Ich sag nur global lol.

Also, haste toll gemacht!
Ich lasse diese Klammern eigentlich auch nur dann weg, wenn ich zu 100% weiß, dass ich nur 1 Anweisung in der if-Anweisung habe. Ich lösche die Klammern auch erst später nachdem ich genau weiß ob das Script funzt oder nicht. Es ist mir leider auch schon mal passiert, dass ich zu der einen Anweisung eine zweite Anweisung hinzugetan habe und diese aber nicht funzte weil die Klammern fehlten.

Also ich persönlich finde es schöner wenn bei einer Anweisung die Klammern wegfallen. Aber jedem das seine.
Referenz-URLs