无法读取罐子中的图像



我写了一个程序来加密Netbeans中的一个图像。该程序在从netbeans运行时工作正常,但当我将其构建到.jar文件时,它不工作,即使我将图像文件放在与.jar文件相同的文件夹中,它也无法读取图像。

    package test;
    import java.io.IOException;
    import java.io.File;
    /**
     *
 * @author AMaR
*/
public class Test {
/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws IOException, Exception {

    File EnImage = new File("encrypted.png");
    File DeImage = new File("decrypted.png");
    int[] pixels;
    LoadImage l = new LoadImage();
    l.load();
    pixels= l.getImagePixels();
    RC4New rc4 = new RC4New();
    int key[]= {13,2,4,6,};
  //  int data[]={5,10,90,5};
    rc4.KSA(key);
    int[] text = rc4.PRNG(pixels);
    l.write((int)512,(int)512,text,EnImage);
    //RC4New rc41 = new RC4New();
    rc4.KSA(key);
    int[] text1 = rc4.PRNG(text);
    l.write((int)512,(int)512,text1,DeImage);

 /*   for(int i=0;i<text.length;i++){
        System.out.println(text[i]);
    }
     RC4New rc41 = new RC4New();
     rc4.KSA(key);
    int[] text1 = rc4.PRNG(text); 
     for(int i=0;i<text1.length;i++){
        System.out.println(text1[i]);
    }
   */ 
    System.out.println("length:"+pixels.length);
  //  l.write((int)512,(int)512,text);
    // TODO code application logic here
}
    } 

//加密
 package test;
 /**
     *
 * @author AMaR
 */
 public class RC4New {
 int state[] = new int[256];
 int j;
 /**
 *
 * @param key
 */
public void KSA(int[] key){ 
    int tmp;
    for (int i=0; i < 256; i++) {
        state[i] = i;
    }
    j=0;
    for (int i=0; i < 256; i++) {
       j = (j + state[i] + key[i % key.length]) % 256;
        tmp = state[i];
        state[i] = state[j];
        state[j] = tmp;
    }
}
    public int[] PRNG(int[] data){
    int tmp,k;
    int i=0;
    j=0;
    int[] cipherText = new int[data.length];
    for(int x=0;x<data.length;x++){
        i = (i + 1) % 256;
        j = (j + state[i]) % 256;
        tmp = state[i];
        state[i] = state[j];
        state[j] = tmp;
        k = state[(state[i] + state[j]) % 256];
        cipherText[x]=  (data[x] ^ k);
    }
    return cipherText;

    }

    }

//加载/写入图像

    package test;
    import java.awt.Dimension;
    import java.awt.image.BufferedImage;
    import java.awt.image.Raster;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    import java.io.File;
    import java.awt.image.WritableRaster;
    /**
    *
    * @author AMaR
    */

    public class LoadImage {
      BufferedImage image;
      void load()throws Exception { 
   //  FIle newfile = new File("lena.png)
     image = ImageIO.read(getClass().getResourceAsStream("lena.png"));
    }
    public Dimension getImageSize() {
    return new Dimension(image.getWidth(), image.getHeight());
    }
   public int[] getImagePixels() {
    int [] dummy = null;
    int wid, hgt;
   // compute size of the array
    wid = image.getWidth();
    hgt = image.getHeight();
   // start getting the pixels
   Raster pixelData;
   pixelData = image.getData();
   return pixelData.getPixels(0, 0, wid, hgt, dummy);

   }
    @SuppressWarnings("empty-statement")
   public void write(int width ,int height, int[] pixels,File outputfile) {
       try {
   // retrieve image
    BufferedImage writeImage = new BufferedImage(512, 512, BufferedImage.TYPE_BYTE_GRAY);;
     // File outputfile = new File("encrypted.png");
    WritableRaster raster = (WritableRaster) writeImage.getData();
    raster.setPixels(0,0,width,height,pixels);
    writeImage.setData(raster);
    ImageIO.write(writeImage, "png", outputfile);
    } catch (IOException e) {
      }
     }
    }

不清楚下面哪个触发了您的错误。这个

 File EnImage = new File("encrypted.png");

将从当前目录读取,该目录不一定与jar文件所在的目录相同。

image = ImageIO.read(getClass().getResourceAsStream("lena.png"));

将从您的类所在的jar文件的目录中读取。注意,您是从 jar文件中读取,而不是从目录中读取

给定上面的代码,我将:

  1. 确定或显式指定File()操作的工作目录。您的工作目录是您调用java的目录,在没有IDE
  2. 的情况下,这可能会有所不同。
  3. 将lena.png打包为.jar文件中的资源。

相关内容

  • 没有找到相关文章

最新更新