Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [JAVA] captcha

  1. #1
    Utente di HTML.it L'avatar di allejo
    Registrato dal
    Jul 2001
    Messaggi
    747

    [JAVA] captcha

    Ciao a tutti esperti di Java :-)
    volevo chiedervi se nel server metto una piccola immagine vuota...cioè solo uno sfondino..è possibile chiamare questa immagine e sullo sfondo metto solo una stringa in codice?
    solo che sono alle prime armi di captcha e non so da dove cominciare...
    perchè ho fatto una ricerca e alla fine non ho capito una cippa :-)

    Aspetto un piccolo aiuto
    Ciauz
    Allejo

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] captcha

    Originariamente inviato da allejo
    volevo chiedervi se nel server metto una piccola immagine vuota...cioè solo uno sfondino..è possibile chiamare questa immagine e sullo sfondo metto solo una stringa in codice?
    solo che sono alle prime armi di captcha e non so da dove cominciare...
    perchè ho fatto una ricerca e alla fine non ho capito una cippa :-)
    Sostanzialmente dovresti fare una Servlet che fa, a grandi linee, le seguenti cose:

    1) Crea una immagine da zero oppure legge da file una immagine preesistente.
    2) Usa il Graphics/Graphics2D dell'oggetto immagine per disegnare sopra alla immagine quello che vuoi. Nel caso di un "captcha" il codice (lettere e/o cifre) tipicamente dovrebbe arrivare da un attributo nello scope "session" (impostato ad esempio a seguito della richiesta della pagina dove c'è il captcha).
    3) Scrive sul output stream della response la immagine codificata nel formato voluto (es. gif, png, ecc..). Chiaramente bisogna anche impostare correttamente gli header del Content-Type, Content-Length e eventualmente altri.

    La servlet verrà chiamata quando in una pagina web c'è il tag <img> il cui src "punta" alla servlet che sarà "mappata" in qualche modo. Es.:

    [img]blabla/captcha.do[/img]</img>
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di allejo
    Registrato dal
    Jul 2001
    Messaggi
    747
    Ok grazie...
    ora mi metto subito a provare e capire come funziona il Graphics2D....
    allora a presto perchè sicuramente inposterò domande :-D
    ciauz
    Allejo

  4. #4
    Utente di HTML.it L'avatar di allejo
    Registrato dal
    Jul 2001
    Messaggi
    747
    Eccomi qui....
    ho fatto un codice del genere...ma non so se è esatto
    codice:
    String elegibleChars = "ABCDEFGHILMNOPQRSTUVZXJKW123456789"; 
    	int circlesToDraw = 10; 
    	int linesToDraw = 5; 
    	int charsToPrint = 6; 
    	int fontSize = 22; 
    	Color backgroundColor = new Color(204, 255, 51); 
    	Color textColor = new Color(0, 123, 0); 
    	Color circleColor = new Color(0, 200, 0); 
    	Color lineColor = Color.GREEN; 
    	String text; 
    	int width = 150; 
    	int height = 45; 
    	try { 
    		Font textFont = new Font("Arial", Font.BOLD, fontSize); 
    		float horizMargin = 20.0f; 
    		double rotationRange = 0.8; 
    		BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
    		Graphics2D g = (Graphics2D) bufferedImage.getGraphics(); 
    		g.setColor(backgroundColor); 
    		g.fillRect(0, 0, width, height); 
    		g.setColor(circleColor); 
    		for(int i=0; i<circlesToDraw; i++) { 
    			int circleRadius = (int) (Math.random() * height / 2.0); 
    			int circleX = (int) (Math.random() * width - circleRadius); 
    			int circleY = (int) (Math.random() * height - circleRadius); 
    			g.drawOval(circleX, circleY, circleRadius * 2, circleRadius * 2);       
    		} 
    		g.setColor(lineColor); 
    		for(int i=0; i<linesToDraw; i++) { 
    			g.drawLine(0, i*(height/linesToDraw)+1, width, i*(height/linesToDraw)+1);       
    		} 
    		g.setColor(textColor); 
    		g.setFont(textFont); 
    		FontMetrics fontMetrics = g.getFontMetrics(); 
    		int maxAdvance = fontMetrics.getMaxAdvance(); 
    		int fontHeight = fontMetrics.getHeight(); 
    		char[] chars = elegibleChars.toCharArray(); 
    		float spaceForLetters = -horizMargin * 2 + width; 
    		float spacePerChar = spaceForLetters / (charsToPrint - 1.0f); 
    		StringBuffer finalString = new StringBuffer();             
    		for(int i=0; i<charsToPrint; i++) { 
    			double randomValue = Math.random(); 
    			int randomIndex = (int) Math.round(randomValue * (chars.length - 1)); 
    			char characterToShow = chars[randomIndex]; 
    			finalString.append(characterToShow); 
    			text = finalString.toString(); 
    			int charWidth = fontMetrics.charWidth(characterToShow); 
    			int charDim = Math.max(maxAdvance, fontHeight); 
    			int halfCharDim = (int) (charDim / 2); 
    			BufferedImage charImage = new BufferedImage(charDim, charDim, BufferedImage.TYPE_INT_ARGB); 
    			Graphics2D charGraphics = charImage.createGraphics(); 
    			charGraphics.translate(halfCharDim, halfCharDim); 
    			double angle = (Math.random() - 0.5) * rotationRange; 
    			charGraphics.transform(AffineTransform.getRotateInstance(angle)); 
    			charGraphics.translate(-halfCharDim,-halfCharDim); 
    			charGraphics.setColor(textColor); 
    			charGraphics.setFont(textFont); 
    			int charX = (int) (0.5 * charDim - 0.5 * charWidth); 
    			charGraphics.drawString("" + characterToShow, charX, (int) ((charDim - fontMetrics.getAscent()) / 2 + fontMetrics.getAscent())); 
    			float x = horizMargin + spacePerChar * (i) - charDim / 2.0f; 
    			int y = (int) ((height - charDim) / 2); 
    			g.drawImage(charImage, (int) x, y, charDim, charDim, null, null); 
    			charGraphics.dispose();             
    		}
            
    	} catch (Exception e) { }
    compila correttamente senza errori...
    ma quando lancio mi da questo errore:
    java.lang.NoClassDefFoundError: sun.awt.X11GraphicsEnvironment
    qualcuno sa aiutarmi?????
    Allejo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.