vendredi 15 avril 2011

Grails thumbnail : Reduire une image dans grails en gardant une bonne qualité

En java ce n'est pas forcement facile de trouver une librairie pour réduire des images en gardant une bonne qualité.

Heureusement il existe le projet Java Image Scaling qui a sa librairie sur maven.
http://code.google.com/p/java-image-scaling/


Maintenant voici comment intégrer Java Image Scaling dans grails : un jeu d'enfant :)

Ajouter la dépendance suivante dans grails-app/conf/BuildConfig.groovy


runtime 'com.mortennobel:java-image-scaling:0.8.5'


Dans votre controller ajoutez le bout de code suivant :


/**
* Return the content of screen shot
*/
def viewScreen = {
File img = new File("myImage.png")
response.contentType = 'image/png'
if(params.thumbnail){
BufferedImage inputImage = ImageIO.read(img);
BufferedImage rescaledImage = new MultiStepRescaleOp(DimensionConstrain.createMaxDimension(355,500)).filter(inputImage, null);
def outputStream = new ByteArrayOutputStream()
ImageIO.write(rescaledImage, "png", outputStream);
response.outputStream << outputStream.toByteArray()
}else{
response.outputStream << img.bytes
}
}

jeudi 14 avril 2011

Firefox4 (Iceweasel4) sur Debian Squeeze

La méthode est simple il suffit de saisir les commandes suivantes sous root :


echo "deb http://mozilla.debian.net/ squeeze-backports iceweasel-4.0" > /etc/apt/sources.list.d/firefox.list

apt-get update

apt-get install iceweasel

Selenium JUnit4 et Maven

Voici un exemple de test Junit qui démarre un Serveur Selenium puis execute un ensemble de tests.

Je prefère ce type de configuration, plutôt que d'écrire 50 lignes de XML dans maven afin de lancer un serveur selenium : http://blog.xebia.fr/2011/02/18/automatiser-les-tests-selenium-avec-maven/

import com.thoughtworks.selenium.DefaultSelenium;
import org.junit.*;
import org.openqa.selenium.server.SeleniumServer;

import static org.junit.Assert.*;


public class DemoTest {

private static SeleniumServer server;
private DefaultSelenium selenium;

@BeforeClass
public static void startSeleniumServer() throws Exception {
System.out.println("START Selenium Server");
server = new SeleniumServer();
server.start();
}

@Before
public void fixture() {
selenium = new DefaultSelenium("localhost", 4444, "*firefox" , "http://google.fr/");
selenium.start();
}

@Test
public void testWhatYouWant() throws Exception {
...
}

@Test
public void testWhatYouWant2() throws Exception {
...
}

@After
public void tearDown() throws Exception {
selenium.stop();
}

@AfterClass
public static void stopSeleniumServer() throws Exception {
server.stop();
}
}



Voici mes dépendances maven :


<dependencies>
<dependency>
<groupid>junit</groupid>
<artifactid>junit</artifactid>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupid>org.seleniumhq.selenium</groupid>
<artifactid>selenium-server</artifactid>
<version>2.0b3</version>
</dependency>
<dependency>
<groupid>org.seleniumhq.selenium</groupid>
<artifactid>selenium-remote-control</artifactid>
<version>2.0b3</version>
</dependency>
</dependencies>