Rails : ImageScience pour manipuler les images

La librairie ImageScience permet de créer des miniatures d’images très simplement.

Exemple :
ImageScience.with_image(@image) do |img|
img.thumbnail(100) do |thumb|
thumb.save @thumb_image
end

Ok, jusque la, c’est super simple. On génère notre miniature :-)
C’est avant que c’est un tantinet plus compliqué (ou pas), lorsque l’on désire installer ImageScience.
Ici, on ne prends pour exemple que le cas d’une plateforme Debian.

En considérant que Ruby, Rails et gem sont déjà installés. Si ce n’est pas le cas, je vous invite à regarder ici.

Installons donc ImageScience.
gem install image_science

Cool et simple non ?
Cependant si vous installez cela comme ça, vous n’irez pas très loin.
Vous allez en effet vous confronter à une erreur similaire à celle-ci :

CompilationError (error executing “gcc -shared -fPIC -Wall -g -fno-
strict-aliasing -O2 -fPIC -I /usr/lib/ruby/1.8/i486-linux -I /usr/
include -L/usr/lib -o \”/nonexistent/.ruby_inline/
Inline_ImageScience_aa58.so\” \”/nonexistent/.ruby_inline/
Inline_ImageScience_aa58.c\” -lfreeimage -lstdc++ “: 256
Renamed /nonexistent/.ruby_inline/Inline_ImageScience_aa58.c to /
nonexistent/.ruby_inline/Inline_ImageScience_aa58.c.bad):
/usr/lib/ruby/gems/1.8/gems/RubyInline-3.7.0/lib/inline.rb:449:in
`build’
/usr/lib/ruby/gems/1.8/gems/RubyInline-3.7.0/lib/inline.rb:654:in
`inline’
/usr/lib/ruby/gems/1.8/gems/image_science-1.1.3/lib/
image_science.rb:84

En effet, ImageScience requiert l’installation de FreeImage, une librairie en C qui permet la manipulation d’images.

Son installation (sous Debian) est également très simple (le problème pour moi a surtout été de trouver que le problème venait de FreeImage ;-) ).
wget http://kent.dl.sourceforge.net/sourceforge/freeimage/FreeImage3100.zip
unzip FreeImage3100.zip
cd FreeImage
make
make install

Zou ! ImageScience et FreeImage sont installés, tout doit fonctionner correctement. Vous générez vos miniature.

Il peut arriver cependant que vous ayez une erreur du genre de celle-ci :

Errno::EACCES (Permission denied - /nonexistent):

En effet, afin d’utiliser FreeImage, ImageScience crée des documents C qu’il compile en live. Pour cela il doit avoir accès à un répertoire, qui est défini ainsi :
env = ENV['INLINEDIR'] || ENV['HOME']

INLINEDIR doit être configuré dans le fichier environnment.rb (répertoire config).
J’ai par exemple mis
ENV['INLINEDIR'] = File.join(File.dirname(__FILE__),’../tmp’)
Ainsi mon inlinedir est situé dans le répertoire tmp de mon application.

Il faut ensuite donner les droits à ce répertoire à l’utilisateur avec lequel l’application est lancée.
Si vous êtes dans un environnement Apache/Passenger, vous pouvez personnaliser cet utilisateur en ajoutant, dans votre configuration de apache :
PassengerDefaultUser www-data
Ou www-data est l’utilisateur evidemment.

This entry was posted on Jeudi, août 7th, 2008 at 14:10 and is filed under Développement. You can follow any responses to this entry through the RSS 2.0 feed. You can skip to the end and leave a response. Pinging is currently not allowed.

1 Comment

  1. Thanh says:

    Jolie photo :D

    ... on July août 8th, 2008

Post a Comment