Avatar billede skovborg Nybegynder
11. september 2004 - 22:42 Der er 4 kommentarer og
2 løsninger

manipulering af billede

Hallo, hvad kan man dog ikke finde på at lave en lørdag aften...
Jeg sidder og bakser for at finde en NEM måde på hvordan jeg kan ændre opløsningen på ca. 400 billeder...
Jeg vil gerne lave et program der går ind og laver et mini billede af det orginale og det skal naturligvis være i JAVA.

Er der nogen der har nogle gode forslag?? eller en bid kode måske??
Det er kun billede delen jeg er interesseret i alt anden har jeg styr på.

Med venlig hilsen
Morten Skovborg
Avatar billede arne_v Ekspert
11. september 2004 - 22:55 #1
Du skal have fat i et heftigt grafik bibliotek for Java.

Gæt: http://www.yeo.id.au/jmagick/
Avatar billede skovborg Nybegynder
11. september 2004 - 23:26 #2
jeg kan nu bedre lide at alt er lavet i java... kald mig bare gammeldags.

MEd venlig hilsen
Morten Skovborg
Avatar billede arne_v Ekspert
11. september 2004 - 23:35 #3
Avatar billede skovborg Nybegynder
11. september 2004 - 23:46 #4
Her skal du se min dreng det eer dælme guf...
Skal vi dele mine points lige i porten??
Læg et svar så får du halv delen.
Vi ses
Morten Skovborg

import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
public class imagerescale{
public static void main(String[] args) throws IOException {
  rescale(new File("c:\\tux\\IMGP3051.JPG"), 0.5);       
  rescale(new File("c:\\tux\\IMGP3051.JPG"), 1.5);   
}   
public static void rescale (File file, double factor) throws IOException {       
  BufferedImage image = ImageIO.read(file);       
  BufferedImage rescaled = rescale(image, factor);       
  boolean success = ImageIO.write(rescaled, getFileSuffix(file), file);       
  if (!success)           
    throw new IOException("write failed: " + file.getName());   
}   
public static String getFileSuffix(File file) throws IOException {       
  String filename = file.getName();       
  int dot = filename.lastIndexOf('.');       
  if (dot == -1)           
    throw new IOException("no file suffix: " + filename);       
  return filename.substring(1+dot);   
}    //choose best algorithm for factor   
public static BufferedImage rescale(BufferedImage image, double factor) {       
  int w = (int) (image.getWidth() * factor);       
  int h = (int) (image.getHeight()* factor);       
  BufferedImage result = createCompatibleImage(image, w, h);       
  Graphics2D g = result.createGraphics();       
  if (factor < 1) {           
    Image temp = image.getScaledInstance(w, h, Image.SCALE_AREA_AVERAGING);           
    g.drawImage(temp, null, null);
  } else {
    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
    g.drawRenderedImage(image, AffineTransform.getScaleInstance(factor, factor));
  }
  g.dispose();
  return result;
}
public static BufferedImage createCompatibleImage(BufferedImage image, int w, int h) {
  ColorModel cm = image.getColorModel();
  WritableRaster raster = cm.createCompatibleWritableRaster(w, h);
  return new BufferedImage(cm, raster, cm.isAlphaPremultiplied(), null);
}}
Avatar billede arne_v Ekspert
11. september 2004 - 23:51 #5
ok
Avatar billede skovborg Nybegynder
12. september 2004 - 02:32 #6
Her er så hele den super kode der minsker størrelsen på mine billeder:

//package findandmovefiles;
import java.io.File;

import java.io.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import javax.imageio.*;

//import java.util.LinkedList;
public class FindFiles {
  public static void main(String[] args) {
    System.out.println("Starting");
    if(args[0]==null || args[1]==null){
      System.out.println("NO args");
      System.exit(0);
    }
    FindFiles f= new FindFiles(args[0],args[1]);
//    FindFiles f= new FindFiles("c:\\tmp\\tmp\\ost\\ost2\\","d:\\tmp\\tmp\\");
  }

  public FindFiles(String from,String to) {
    this.from=from;
    this.to=to;
    findFilesAndDirs(from);
  }
  String from;
  String to;
  /*
  private boolean copyFile(String from,String fileName){
    File file = new File(to+fileName);

    return true;
  }*/
  private boolean copyFile(String source, String dest)
    {
        try
        {
//            FileInputStream in=new FileInputStream(new File(source));
//            FileOutputStream out=new FileOutputStream(new File(dest));
            BufferedInputStream in=new BufferedInputStream(new FileInputStream(new File(source)));
            BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream(new File(dest)));

            int data;

            while((data=in.read())!=-1)
            {
                out.write(data);
            }

            in.close();
            out.close();
            File file =new File(dest);
            if(file.length()>144000 && file.length()<1900000)
                System.out.println("Size of file before rescale[" + file.length() + "]");
                rescale(new File(dest), 1);
                System.out.println("Size of file after rescale[" + file.length() + "]");
        }
        catch (IOException e)
        {
            return false;
        }
        return true;
    }

  private void findFilesAndDirs(String from){
    String txt;
    System.out.println("Looking for files in [" + from +"]");
    File file=new File(from);
    File[] fileList= file.listFiles();
    int len= fileList.length;
    System.out.println("len=" + len);
    for(int i=0;i<len;i++){
      System.out.println("i=" + i);
      System.out.println("fileList["+ i +"]" + fileList[i]);
      if(fileList[i].isDirectory()){
        System.out.println("UPS Is Dir");
        findFilesAndDirs(fileList[i].toString());
      }
      if(fileList[i].isFile()){
        txt=fileList[i].toString();
        if(txt.toUpperCase().endsWith("JPG")){
          System.out.println("Yes is file");
          if(fileList[i].length()<1900000)
          copyFile(fileList[i].getPath().toString(),to+fileList[i].getName());
        }

      }
    }
  }
  public static void rescale (File file, double factor) throws IOException {
  System.out.println("Testing file length");
  if(file.length()>144000){
             
    System.out.println("Rescaling file");
    BufferedImage image = ImageIO.read(file);       
    BufferedImage rescaled = rescale(image, factor);       
    boolean success = ImageIO.write(rescaled, getFileSuffix(file), file);       
    if (!success)           
        throw new IOException("write failed: " + file.getName());   
      rescale (file,0.5);
  }
 
     
}
   
public static String getFileSuffix(File file) throws IOException {       
  String filename = file.getName();       
  int dot = filename.lastIndexOf('.');       
  if (dot == -1)           
    throw new IOException("no file suffix: " + filename);       
  return filename.substring(1+dot);   
}    //choose best algorithm for factor   

public static BufferedImage rescale(BufferedImage image, double factor) {       
  int w = (int) (image.getWidth() * factor);       
  int h = (int) (image.getHeight()* factor);       
  BufferedImage result = createCompatibleImage(image, w, h);       
  Graphics2D g = result.createGraphics();       
  if (factor < 1) {           
    Image temp = image.getScaledInstance(w, h, Image.SCALE_AREA_AVERAGING);           
    g.drawImage(temp, null, null);
  } else {
    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
    g.drawRenderedImage(image, AffineTransform.getScaleInstance(factor, factor));
  }
  g.dispose();
  return result;
}

public static BufferedImage createCompatibleImage(BufferedImage image, int w, int h) {
  ColorModel cm = image.getColorModel();
  WritableRaster raster = cm.createCompatibleWritableRaster(w, h);
  return new BufferedImage(cm, raster, cm.isAlphaPremultiplied(), null);
}

}

Jeg håber at der er andre der kan bruge den til noget.

Med venlig hilsen
Morten Skovborg
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester