我在服务器的某个文件夹下存放了几个文件,希望合成一幅后输出到页面。从网上看了一些例子,还是没找到合适的解决办法。

解决方案 »

  1.   

    用ImageMagick吧,你上网搜索下,这个是专门对图片进行处理的!
      

  2.   


    用户需要将这张合成的图片Email给他的客户。
      

  3.   

    我有个思路是,用SERVELET。用Image读入图片,然后在Graphics中合成,然后用流输出到页面。有两个问题,我还没弄明白:1、Graphics可以不可以在SERVELET中使用?2、如何将Graphics中的图片输出到流。请高手给鉴定一下可行性。
    这里有一个APPLET合成图像的例子,供参考。我想知道怎么在JSP中实现。下面的程序对两个图像进行合成并显示来模拟图像的淡入淡出.程序运行后,每按一次向上键,前景图像就增强一点,每按一次向下键,前景图像就减弱一点.首先你要了解图像数据.每个象素点的信息由一个整数表达.整数共32个二进制位,从左向右,分成四个部分,每部分都是8位.第一部分: Alpha 信息.控制图像显示的强度.下面的程序就是通过调整这个数值控制图像的淡入淡出.第二部分:红色数据.第三部分:绿色数据.第四部分:蓝色数据.程序使用的方法是:先画背景图像,再在上面画带Alpha数据的前景图像,通过调整Alpha值使前景图像淡入 淡出.import java.applet.*;import java.awt.*;import java.awt.image.*;public class alpha extends Applet{Image background, foreground;//背景图像和前景图像Image foreground_new;//依据前景图像生成的带Alpha通道的新图像MediaTracker mt;int foreground_alpha=175;//前景图像的起始Alpha值int foreground_data[];//用来生成新图像的内存数据PixelGrabber pg;int transparancy;//前景图像的全透明点的像素值.只要前景图像的某个点是这个值,它就全透明public void init(){background=getImage(getCodeBase(),"mama.gif");foreground=getImage(getCodeBase(),"baba.gif");mt=new MediaTracker(this);mt.addImage(background,1);mt.addImage(foreground,2);try{mt.waitForAll();} // 等待所有图片的数据都被正确载入catch(InterruptedException e){ }foreground_data=new int[foreground.getWidth(this) * foreground.getHeight(this)];//初始化//下面把前景图片的数据载入数组pg=new PixelGrabber(foreground,0,0,foreground.getWidth(this),foreground.getHeight(this),foreground_data,0,foreground.getWidth(this));try{pg.grabPixels();}catch(InterruptedException e){ }for (int i=0;i<(foreground.getWidth(this) * foreground.getHeight(this));i++)foreground_data[i]=foreground_data[i]&0x00ffffff;//把所有的象素的Alpha值置为0//下面我把图像左上角的点的值作为透明值.假如图像中哪个点的值和左上角的点的值一样,//这个点就全透明--背景100%出现.我用这个比较简单的办法把前景图像中我不想要的部分去掉transparancy=foreground_data[0];}public void paint(Graphics g){g.drawImage(background,0,0,this);}public boolean keyDown(Event e, int key){if (key==Event.UP && foreground_alpha<255)//依据按键改变Alpha值foreground_alpha++;if (key==Event.DOWN && foreground_alpha>0)foreground_alpha--;showStatus(String.valueOf(foreground_alpha));//在状态栏显示Alpha值for (int i=0;i<(foreground.getWidth(this) * foreground.getHeight(this));i++)//逐点处理{foreground_data[i]=foreground_data[i] & 0x00ffffff;//置此点为全透明if (foreground_data[i]!=transparancy)//假如这个点的值和全透明点不同foreground_data[i]=foreground_data[i] | (foreground_alpha<<24);//给它Alpha值}foreground_new=createImage(new MemoryImageSource(foreground.getWidth(this),foreground.getHeight(this),foreground_data,0,foreground.getWidth(this)));//生成前景图象mt.addImage(foreground_new,3);try{mt.waitForID(3);} catch(InterruptedException e2){ }getGraphics().drawImage(background,0,0,this);//先画背景getGraphics().drawImage(foreground_new,100,100,this);//再画前景return true;}}下面是HTML文件:<APPLET CODE="alpha.class"WIDTH=300 HEIGHT=300></APPLET>