package com.img.reflection;import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.MemoryImageSource;
import java.awt.image.PixelGrabber;
import java.io.File;
import java.io.IOException;import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;public class ImageUtil extends JPanel
{
private Image img;
    private Image reflectImg;
    private int h;
    
private static int convertPixel(int x, int y, int w, int h, int pixel,
int fadeSpeed)
{
int alpha = (pixel >> 24) & 0xff;
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = (pixel) & 0xff; double percent = (double) (y * 100) / h / 100d;
for (int i = 0; i < fadeSpeed; i++)
{
percent = percent * percent;
}
alpha = (int) (alpha * percent);
alpha = Math.min(alpha, 150);
int gray = (red + green + blue) / 3;
return ((alpha << 24) + (gray << 16) + (gray << 8) + gray);
} public static Image createShadowImage(Image image, int fadeSpeed)
{
int w = image.getWidth(null);
int h = image.getHeight(null);
int[] pixels = new int[w * h];
PixelGrabber pg = new PixelGrabber(image, 0, 0, w, h, pixels, 0, w);
try
{
pg.grabPixels();
} catch (Exception e)
{
return null;
}
for (int j = 0; j < h; j++)
{
for (int i = 0; i < w; i++)
{
pixels[j * w + i] = convertPixel(i, j, w, h, pixels[j * w + i],
fadeSpeed);
}
}
int[] newPixels = new int[w * h];
for (int j = 0; j < h; j++)
{
for (int i = 0; i < w; i++)
{
newPixels[j * w + i] = pixels[(h - j - 1) * w + i];
}
} MemoryImageSource source = new MemoryImageSource(w, h, newPixels, 0, w);
return Toolkit.getDefaultToolkit().createImage(source);
}
  @Override
 protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.drawImage(img, 0, 0, this);
        g2d.drawImage(reflectImg, 0, h, this);
 }
  
 public ImageUtil() throws IOException{
 img = ImageIO.read(new File("d:/pic.jpg"));
 h = img.getHeight(null);
 reflectImg = createShadowImage(img,3);
 draw();


 }
public static void main(String[] args) throws IOException
{
        JFrame frame = new JFrame();
        frame.getContentPane().add(new ImageUtil());
        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 800);
        frame.setVisible(true); }
    
public void draw()
{
BufferedImage buffImage = new BufferedImage(img.getWidth(null), reflectImg.getHeight(null)+h,
BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = buffImage.createGraphics();

g2.drawImage(img, 0, 0, null);
g2.drawImage(reflectImg, 0, h, null);
g2.dispose();
File f = new File("d:/test.jpg ");
try
{
ImageIO.write(buffImage, "jpg ", f);
} catch (IOException e)
{
e.printStackTrace();
}
}
}成网上拷了段代码,自己写了一个draw()方法用来保存处理好的图片,不知道draw()存在什么问题,保存的图片怎是0K。