Julio 2005


Además de que puedes, debes!

A raíz de un post en Subflash, un compañero del mismo me comentaba que a él tampoco le gustaba regalar su código…
Hace poco yo también confundía la idea de que software libre era lo mismo que software grátis.
Pues bien, GNU nos lo deja bien claro… DEBEMOS hacerlo siempre que podamos… es la mejor manera de azuzar el software libreporque así, afirman es posible que invirtamos en desarrollos nuevos.

http://www.gnu.org/philosophy/selling.es.html

Macromedia ya ha soltado una beta del flash player

http://www.macromedia.com/software/flashplayer/public_beta/

ojito a las nuevas posiblilidades del player: en osFlash ya se han hecho eco de las mismas

http://www.osflash.org/doku.php?id=flashcoders:undocumented:flash8

Paseando por chorradas sacadas de googlemaps, encontré una página curiosa que había petado por exceso de ancho de banda, y agradecida por el trabajo de su empresa de hosting por arreglar su incidencia, posteó el enlace de la misma.
Se trata de euroVPS, una empresa europea que se jacta de trabajar tan bien como las americanas en esto del hosting ultra-barato.
De momento, cuentan con cpanelx, y soluciones que van desde 2€/mes. Si cuentan también con la infraestructura hardware americana, pueden ser una opción de futuro.
Ya os diré cual cojo al final…
Y bueno, pues al final me he decidido por contratarlo… de momento el servicio es excelente…

Llevo unos cuatro años ya trabajando en proyectos con Java y nunca había tenido que trabajar con la API de imágenes que Sun proporciona. Bueno, pues ahora estoy embarcado en un pequeño proyecto en el cual había que procesar imágenes. Como siempre me pasa, debido a tiempos, prefiero tirar de google y mirar lo que alguien ha andado y defenderme como buenamente puedo, antes que chaparme la API. Craso error. Después de dar vueltas me bajo un código algo obsoleto, para, un día después descubrir la clase ImageIO, disponible a partir de la versión 1.4, mas potente para estos menesteres.

No es una panacea de clase, pero seguro que ayuda a más de un despistado como yo hace un par de días ;)

JAVA:
  1.  
  2. /*
  3. * ImageUtils.java
  4. *
  5. * Created on 20 de julio de 2005, 11:47
  6. * Resizes jpeg image files on your file system.
  7. * Uses the com.sun.image.codec.jpeg package shipped
  8. * by Sun with Java 2 Standard Edition.
  9. *
  10. * @author Randy Belknap
  11. * @revision Alejandro Sánchez Marcos
  12. * se aprovecha la nueva clase ImageIO de 1.4
  13. * y se añaden algunos métodos nuevos
  14. */
  15.  
  16. package com.electroduendes.util.image;
  17.  
  18. import java.awt.geom.AffineTransform;
  19. import java.awt.image.AffineTransformOp;
  20. import java.awt.image.BufferedImage;
  21. import java.io.File;
  22. import javax.imageio.ImageIO;
  23. import org.apache.log4j.Logger;
  24.  
  25. /**
  26. */
  27. public class ImageUtils {
  28.     static Logger logger = Logger.getLogger(ImageUtils.class);
  29.     /*
  30.      * devuelve la lista de formatos disponibles a leer por ImageIO
  31.      * @return un array de strings con los mismos.
  32.      */
  33.     public static String[] getAvailableFormats(){
  34.         return ImageIO.getReaderFormatNames();
  35.     }
  36.    
  37.     /*
  38.      * devuelve una imagen (buffer) en función de la ruta de un archivo
  39.      * mejoras
  40.      * @param la ruta del archivo con su nombre
  41.      * @return BufferedImage la imagen en el buffer
  42.      */
  43.     public static BufferedImage loadBufferedImage(String fileName) {
  44.         BufferedImage image = null;
  45.         try {
  46.             /*FileInputStream fis = new FileInputStream(fileName);JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(fis);bi = decoder.decodeAsBufferedImage();fis.close();*/
  47.             // MAS RAPIDO a partir de 1.4
  48.             image = ImageIO.read( new File( fileName ) );
  49.         }
  50.         catch (Exception e) {
  51.             logger.debug("error al intentar leer la imágen");
  52.             return null;
  53.         }
  54.         return image;
  55.        
  56.     }
  57.     /**
  58.      * comprueba que la imágen tiene un mínimo en pixels
  59.      * width y height tienen que tener un tamaño igual o mayor que el pasado
  60.      * como argumento
  61.      *
  62.      * @param w ancho mínimo
  63.      * @param h alto mínimo
  64.      * @return true o false
  65.      *
  66.      */
  67.     public static boolean isGreaterThanMinSize(int w, int h, BufferedImage imgSrc){
  68.         int nHeight = imgSrc.getHeight();
  69.         int nWidth = imgSrc.getWidth();
  70.         if ((nHeight<h ) || (nWidth<w)){
  71.             return false;
  72.         } else {
  73.             return true;
  74.         }
  75.     }
  76.    
  77.     /*
  78.      * calcula el factor de escala mínimo y en base a eso escala la imagen
  79.      * según el dicho factor.
  80.      * @param nMaxWidth minimo tamaño para el ancho
  81.      * @param nMaxHeight minimo tamaño para el alto
  82.      * @param imgSrc la imágen
  83.      */
  84.     public static BufferedImage scaleToSize(int nMaxWidth, int nMaxHeight, BufferedImage imgSrc) {
  85.         int nHeight = imgSrc.getHeight();
  86.         int nWidth = imgSrc.getWidth();
  87.         double scaleX = (double)nMaxWidth / (double)nWidth;
  88.         double scaleY = (double)nMaxHeight / (double)nHeight;
  89.         double fScale = Math.min(scaleX, scaleY);
  90.         return scale(fScale, imgSrc);
  91.     }
  92.    
  93.     /*
  94.      * escala una imagen en porcentaje.
  95.      * @param scale ejemplo: scale=0.6 (escala la imágen al 60%)
  96.      * @param srcImg una imagen BufferedImage
  97.      * @return un BufferedImage escalado
  98.      */
  99.     public static BufferedImage scale(double scale, BufferedImage srcImg) {
  100.         if (scale == 1 ) {
  101.             return srcImg;
  102.         }
  103.         (AffineTransform.getScaleInstance(scale, scale), null);
  104.        
  105.         return op.filter(srcImg, null);
  106.        
  107.     }
  108.    
  109.     public static void saveImageToDisk(BufferedImage bi, String str, String format) {
  110.         if (bi != null && str != null) {
  111.            
  112.             // más rápido con ImageIO
  113.             try {
  114.                 ImageIO.write( bi, format /* formato */, new File( str ) /* destino */ );
  115.             } catch (Exception e){}
  116.         }
  117.     }
  118.    
  119.    
  120.     public static void main(String args[]) {
  121.         if(args.length != 3){usage();}
  122.         System.out.println(args[0]);
  123.         BufferedImage bImg = loadBufferedImage(args[0]);
  124.         System.out.println(bImg);
  125.         BufferedImage bImgEscaladaG = scaleToSize(800, 600, bImg);
  126.         BufferedImage bImgEscaladaP = scaleToSize(320, 200, bImg);
  127.        
  128.         saveImageToDisk(bImgEscaladaG, args[1],"JPEG");
  129.         saveImageToDisk(bImgEscaladaP, args[2],"JPEG");
  130.         System.exit(0);
  131.     }
  132.    
  133.     public static void usage(){
  134.         System.out.println("usage: java ImageUtils archivo_original imagen_grande imagen_pequeña ");
  135.         System.exit(1);
  136.     }
  137.    
  138. }

The aim of the JSwiff project is to create an open source, pure Java framework for Macromedia Flash file creation and manipulation.

Intrigado por tal "fechoría", me dispongo a descargar la aplicación soltada bajo el paraguas de la licencia GPL basada 100% en código Java.
De momento no pasa de ser un inspector de archivos swf (bytecode y demás hierbas) aunque el autor promete en la página oficial del proyecto, numerosas mejoras:

  • design of a Java-like language as replacement for ActionScript
  • a pure Java implementation of a compiler for this language
  • a pure Java, Eclipse-based Flash IDE

www.jswiff.com

fuente:javahispano

bueno, pues comenzamos la andadura de este blog! hoy 14 de Julio, escribo mi primer mensaje... tal y como exhortan chemical bros. en el primer tema de cualquier directo...
here we go!