bassebhu Medlem sedan nov. 2001 6 480 inlägg Frågan 9 aug. 2006 17:28 #1 Hej alla glada!
Jag tänkte snickra ihop ett bildvalideringssystem som kan användas för att slippa spam via formulär. Är det någon som redan har gjort ett i PHP eller vet vart jag kan få tag på ett schysst?
Hade tänkt mig den där typen där ett par tecken slumpas fram i form av en bild. Man skriver in tecknen i ett fält och det jämförs sedan med t ex. samma värde hashat från ett hidden-fält.
Alla förslag tas tacksamt emot. Det är väl en GD-lösning som jag är ute efter antar jag.
Tackar för svar!
Mvh,
Fuel Medlem sedan okt. 2000 1 285 inlägg Jag har gjort det 2ggr .. men har ingen aning om var filerna ligger .. ska leta .. hinner nån annan före så ta det
Jag såg en tråd om det för inte så länge sen, tror det var här...
*letar efter kod...*
Oj, här är den:
<?php
session_start();
header("Content-type: image/png");
// Generera en 6-siffrig kod
$string = rand(100000, 999999);
// Spara koden i en session, används vid formulär valideringen
$_SESSION['sess_code'] = $string;
// Höjd, bred på bilden
$width = 82;
$height = 15;
// Storlek och position på typsnittet
$textsize = 20;
$angle = 0; // Snedställ texten
$right = 0; // Hur lång till höger skall texten vara?
$top = 19; // Hur högt upp skall texten vara?
// Sätt höjden och bredden
$image = imagecreate($width, $height);
// Ange bakgrundsfärgen
$bg_color = imagecolorallocate($image, 0xed, 0xec, 0xf1);
// Typsnittets färg
$text_color = imagecolorallocate($image, 0x47, 0x58, 0x7c);
// Skriv ut bilden med den genererade koden.
ImageTTFText($image, $textsize, $angle, $right, $top, $text_color, 'arial.ttf', $string);
imagepng($image);
imagedestroy($image);
?>
Har inte satt mig in i koden, tror den kommer härifrån.
Kanske är en start iaf?
Fuel Medlem sedan okt. 2000 1 285 inlägg Här är regkey.php
<?php
// Generate regkey image
// Fuelman
if (empty($_GET['id'])) {
die("ERROR! You cant access this page");
}
$confirm_id = $_GET['id'];
$confirm_id = htmlspecialchars($_GET['id']);
if (!preg_match('/^[A-Za-z0-9]+$/', $confirm_id)) {
die("ERROR! Wrong confirm id");
}
header('content-type: image/jpeg');
header('cache-control: no-cache, no-store');
$img = imagecreatetruecolor(300, 60);
$font = 'timesi.ttf';
$text_color = imagecolorallocate($img, 255, 255, 255);
$bag_color = imagecolorallocate($img, 255, 51, 51);
imagefill($img, 0, 0, $bag_color);
imagettftext($img, 34, 0, 20, 44, $text_color, $font, $confirm_id);
imagejpeg($img, '', 75);
imagedestroy($img);
?>
EDIT: hehe .. ser att du hann före
bassebhu Medlem sedan nov. 2001 6 480 inlägg Funkade lysande. Fuels funkade säkert också men det andra var mer optimerat för mitt ändamål.
Nu har jag två små frågor till:
Hur får man in en vald bakgrundsbild i stället för bakgrundsfärg i den koden? Är det imagecreatefrompng() som gäller?
Hur räknar man ut sådana där färger? ex. (0x47, 0x58, 0x7c)
Tackar för svar!
P Pedda Medlem sedan juni 2000 6 032 inlägg
Går bra att använda rgb kod
t.ex för vit färg
imagecolorallocate($image, 255, 255, 255);
bassebhu Medlem sedan nov. 2001 6 480 inlägg Tack. Det funkade. Har någon svar på 1:an också så blir tråden fulländad ;)
Min kod såg iaf ut så här när jag var färdig (förutsatt att man har en .ttf-fil att lägga till):
val.php
<?php
session_start();
header("Content-type: image/png");
// Generate a 5 number code -->
$string = rand(10000, 99999);
// Save code in session -->
$_SESSION['val_code'] = $string;
// Image size -->
$width = 64;
$height = 21;
// Text settings -->
$textsize = 16;
$angle = 0; // Text angle
$right = 4; // Text position
$top = 18; // Text position
$font = 'Trebuchet MS.ttf'; // Path to font file
// Set image size -->
$image = imagecreate($width, $height);
// Background color -->
$bg_color = imagecolorallocate($image, 240, 240, 240);
// Text color -->
$text_color = imagecolorallocate($image, 0, 45, 90);
// Print image -->
ImageTTFText($image, $textsize, $angle, $right, $top, $text_color, $font, $string);
imagepng($image);
imagedestroy($image);
?>
Delar av check och formulär på formsidan:
if(isset($_SESSION['val_code']) && $_SESSION['val_code'] == $_POST['val']) {
// rätt kod
} else {
// fel kod
}
[...]
<input type="text" name="val" id="val" maxlength="5" />
<img src="val.php" style="width: 64px; height: 21px; border: none;" alt="val" />
r/ slarvfel
P Pedda Medlem sedan juni 2000 6 032 inlägg Här har du ett kodexempel på hur du använder en bakgrundsbild
<?php
header("Content-type: image/jpeg");
header("Content-Disposition: inline; filename=minbild.jpg");
$im = imagecreatefromjpeg('bilder/minbild.jpg');
$white = imagecolorallocatealpha($im, 255, 255, 255, 75);
$string = "Lite text här";
imagettftext($im, 14, 0, 10, 20, $white, "trebuc.ttf", $string);
imagejpeg($im, '', 90);
imagedestroy($im);
?>
bassebhu Medlem sedan nov. 2001 6 480 inlägg allright. tack. antog att man skulle använda imagecreatefrom*()
salkciN Medlem sedan sep. 2006 19 inlägg Kul och se att mitt gamla skript kommer till användning :)
http://www.phpportalen.net/viewtopic.php?p=366335#366335