`
waitmannee
  • 浏览: 17871 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

上传图片并生成缩略图

    博客分类:
  • java
阅读更多
最近公司说要在portal中添加一个上传图片并生成缩略图的方法,试了很久,终于搞定了;写下点心得吧,使大家少走弯路;
首先做之前,google了一下,发现很多生产缩略图的方法:
BufferedImage img = ImageIO.read(file);
				int h = img.getHeight();
				int w = img.getWidth();
				
				if(h>=96 && w >=96){
					int nw = 96;
		            int nh = (nw * h) / w;
		            if(nh>96) {
		                nh = 96;
		                nw = (nh * w) / h;
		            }
		            ByteArrayOutputStream out = new ByteArrayOutputStream();
					BufferedImage dest = new BufferedImage(nw, nh, BufferedImage.TYPE_INT_RGB);
				    dest.getGraphics().drawImage(img,0,0,nw, nh,null);
				    ImageIO.write(dest, "jpeg", out);
					imageThumbnail = out.toByteArray();
				}
				else{
					imageThumbnail = imageData;
				}

但是使用后发现,对于底色是透明的图片,生成的缩略图是别的颜色的,于是找原因,发现jpeg是最大的祸首;
现在修改代码:
BufferedImage img = ImageIO.read(file);
				int h = img.getHeight();
				int w = img.getWidth();
				
				if(h>=96 && w >=96){
					int nw = 96;
		            int nh = (nw * h) / w;
		            if(nh>96) {
		                nh = 96;
		                nw = (nh * w) / h;
		            }
		            ByteArrayOutputStream out = new ByteArrayOutputStream();
		            BufferedImage dest = new BufferedImage(nw, nh,BufferedImage.TYPE_4BYTE_ABGR);
					dest.getGraphics().drawImage(img,0,0,nw, nh,null);
					GifEncoder.encode(dest, out);
				    //ImageIO.write(dest, "gif", out);
					imageThumbnail = out.toByteArray();
				}
				else{
					imageThumbnail = imageData;
				}

其中使用了GifEncoder这也类,对应的jar包就是gif89.jar,这是个开源的包,做了修改,去掉了恶心的公司logo,现在生成的缩略图没有问题了,连gif的动画也能缩略,强啊
分享到:
评论
31 楼 transist 2008-10-24  
有没有能够把用户上传的高清晰图片如bmp转换为jpg格式的工具包?主要为了减少图片的大小
30 楼 doraemon1293 2008-10-24  
OutputStream os = new FileOutputStream("路径");

BufferedImage dest = new BufferedImage(nw,nh,BufferedImage.TYPE_4BYTE_ABGR);  

dest.getGraphics().drawImage(img,0,0,nw, nh,null);  
                   
GifEncoder.encode(dest, os);

os.close();
29 楼 doraemon1293 2008-10-24  
谢楼主分享

刚才乱弄一通,上传成功了,但是处理大图时会出现好多黑点.. 求完整版
28 楼 mickeymak 2008-08-18  
lz可以提供完整的代码吗?

imageThumbnail = out.toByteArray();
imageThumbnail = imageData;  

中的imageThumbnail, imageData是什么变量? 生成的缩略图是放在哪里的?
27 楼 yewen001 2008-08-18  
是压缩所有的图片吗?用gif,png,bmp文件好像不行吧!
26 楼 tianlan 2008-04-17  
25 楼 domando 2008-03-08  
RoyMax 写道
yyjn12 写道
目前java处理图片还没有一个说的上好用的解决方案的.

java本身的这种api处理图片,当压缩到尺寸比较小时,会有明显的模糊及锯齿效果,极其恶心.

一种可选的方案是使用imagemagick.不过这是个软件,需要安装的.用java的jni来本地调用.有个叫jmagick的项目.也需要安装.并且两个东西安装极其困难,主要是版本的匹配.在官网找不到历史版本.

image magick + jmagick  可以说是从图片处理效果上来说最棒的java的方案了.jni本地调用人家的专业软件嘛.注意,仅仅是从效果上说.
不过jmagick这个项目委实叫人不敢恭维.

不用jmagick,直接用JAVA生成命令行执行处理

我觉得这个方法不错,项目中我也是这么做的。
只要在服务器上面安装这个就可以了,而且java项目,又有几个是跑在window上面的啊。
24 楼 waitmannee 2008-03-06  
suyulin6688 写道
ImageMagick和JMagick可以不安装,然后通过jar和dll来调用吗?

利用jni来调用本地的dll,应该可以的;但是问题是怎么玩的问题
23 楼 ray_linn 2008-03-05  
好象没人用jimi??
22 楼 suyulin6688 2008-03-05  
ImageMagick和JMagick可以不安装,然后通过jar和dll来调用吗?
21 楼 zelsa 2008-02-27  
jmagick 对CMYK色的图片处理有点问题
20 楼 RoyMax 2008-02-27  
yyjn12 写道
目前java处理图片还没有一个说的上好用的解决方案的.

java本身的这种api处理图片,当压缩到尺寸比较小时,会有明显的模糊及锯齿效果,极其恶心.

一种可选的方案是使用imagemagick.不过这是个软件,需要安装的.用java的jni来本地调用.有个叫jmagick的项目.也需要安装.并且两个东西安装极其困难,主要是版本的匹配.在官网找不到历史版本.

image magick + jmagick  可以说是从图片处理效果上来说最棒的java的方案了.jni本地调用人家的专业软件嘛.注意,仅仅是从效果上说.
不过jmagick这个项目委实叫人不敢恭维.

不用jmagick,直接用JAVA生成命令行执行处理
19 楼 waitmannee 2008-02-18  
weifly 写道
用js生成缩略图,没有听说过,还是应该在服务器上生成,毕竟图片的生成,计算还是比较复杂的


用js来生成缩略图是可以,但是前提是你必须已经有image这个js对象,然后再new一个Image,按照比例进行缩放,是可以生成图片的;但是这种解决办法的问题是原来大的图片仍然需要取得,那还要生成缩略图干嘛呢,直接调节图片的大小就可以了嘛;
18 楼 yyjn12 2008-02-18  
目前java处理图片还没有一个说的上好用的解决方案的.

java本身的这种api处理图片,当压缩到尺寸比较小时,会有明显的模糊及锯齿效果,极其恶心.

一种可选的方案是使用imagemagick.不过这是个软件,需要安装的.用java的jni来本地调用.有个叫jmagick的项目.也需要安装.并且两个东西安装极其困难,主要是版本的匹配.在官网找不到历史版本.

image magick + jmagick  可以说是从图片处理效果上来说最棒的java的方案了.jni本地调用人家的专业软件嘛.注意,仅仅是从效果上说.
不过jmagick这个项目委实叫人不敢恭维.
17 楼 weifly 2008-02-18  
用js生成缩略图,没有听说过,还是应该在服务器上生成,毕竟图片的生成,计算还是比较复杂的
16 楼 praguesky 2008-02-17  
aumy2008 写道
如果是在上传前生成缩略图 ,就不用那么麻烦,直接用js就行了。

请教如何实现...

生成多张缩略尺寸又如何解决...
15 楼 lin_zy 2008-01-03  
支持不错,我一直就用这方法
14 楼 waitmannee 2007-12-25  
lszone 写道
用ImageMagick不好吗?这么麻烦

没有用过这个软件,看了下介绍还蛮好的,就是要安装,麻烦,大家可以试一试,看看下面一片文章
http://blog.donews.com/baggio785/archive/2005/12/28/674624.aspx
内容如下:
ImageMagick一个优秀的图像处理软件,JMagick是对ImageMagickJAVA面向对象化包装。

现在谈谈如何在WINDOWS环境下、LINUX环境下这两款软件的安装与使用。并制作了一个缩略图的产生程序。

1、安装
在WINDOWS下安装及使用都相当简单。先去下载IImageMagic WINDOWS的安装包,安装一把就可以了。安装完结之后,一般都把DLL加入到类路径中去了。安装最新版的就可以了(6.0.4版)

安装JMagick,直接得到它的二进制包就可以了(5.6.0)版。将JAR文件放到JAVA类路径下面,将DLL文件放到SYSTEM32目录下,就OK了。


在UNIX环境下安装比较麻烦。
偶这里是用TAR包安装的。先去下载,这里都使用5。6。0版本。
先安装ImageMagick
过程:
  解开包文件
  ./configure 配置文件
  make all
  make install
  就OK了。当然你在配置文件的时候,可以控制一些配置。以保证安装成功。

对JMagick也是同样操作。
  解开包文件
  ./configure 配置文件
  make all
  make install
  make test
一般测试通过就OK了。

生成的静态类库或动态类库一般位于/usr/local/lib目录下。

如果需要在程序中使用,需要输出LD_LIBRARY_PATH目录。就不多说了。

2、使用
    private boolean genearateSumImg(String orgImg) {
        boolean result = false;
 
        //取得原文件
        try {           
           
            MagickImage image = new MagickImage( new ImageInfo( orgImg ) );
            int    scalex = 80;
            int    scaley = 80;                        
            MagickImage small =  image.scaleImage( scalex,scaley);
            small.setFileName( orgImg+IMAGE_SUM_POSTFIX);
            small.writeImage( new ImageInfo() );
 
            result = true;
        } catch (Exception e1) {
            e1.printStackTrace();
        }
        return result;
    }

以上是一个简单的生成缩略图的函数,可以EJB等处使用。

3、可能存在的问题及解决办法
在WEBLOGIC或者TOMCAT中使用。JMagick缺少是采用系统类加载器加载的,当然你也可以修改这个类加载器。

System.setProperty("jmagick.systemclassloader","no");
如采用如上的方法。
参考http://www.yeo.id.au/jmagick/ ,要在tomcat中使用JMagicK需要这三步:
1. Put Jmagick.jar in your WEBINF/lib dir
2. Put the following line in an initialization part of your webapp:
//Tell jmagick.magick.Magick to not use the system ClassLoader
System.setProperty("jmagick.systemclassloader","no");
3. make sure the Jmagick.dll and Imagemagick dlls are on the system
path
以上3步缺一不可

java.lang.UnsatisfiedLinkError: no JMagick in java.library.path
一般是没有输出库文件路径造成的。

NoDecodeDelegateForThisImageFormat: NoDecodeDelegateForThisImageFormat
一般是LINUX中没有安装一些SO文件造成的,可去下载来,在配置能看到输出的情况的,回答YES这个格式也就支持了。
13 楼 waitmannee 2007-12-25  
在csdn上看到一篇文章,写到一个生成缩略图的方法,试用了一下,还不错,唯一的缺点就是不能处理gif的动画,对于gif的动画,只会产生对应的静态图片
reference:http://topic.csdn.net/t/20060603/15/4798174.html

处理图片代码:
package Image;

import java.awt.image.BufferedImage;

public class ScaleImage {
	private int width;

	private int height;

	private int scaleWidth;

	private double support = (double) 3.0;

	private double PI = (double) 3.14159265358978;

	private double[] contrib;

	private double[] normContrib;

	private double[] tmpContrib;

	private int startContrib, stopContrib;

	private int nDots;

	private int nHalfDots;

	/**
	 * Start: Use Lanczos filter to replace the original algorithm for image
	 * scaling. Lanczos improves quality of the scaled image modify by :blade
	 */
	private static ScaleImage instance = new ScaleImage();
	private ScaleImage(){};
	public static ScaleImage getInstance(){
		return instance;
	}
	public BufferedImage imageZoomOut(BufferedImage srcBufferImage, int w, int h) {
		width = srcBufferImage.getWidth();
		height = srcBufferImage.getHeight();
		scaleWidth = w;

		if (DetermineResultSize(w, h) == 1) {
			return srcBufferImage;
		}
		CalContrib();
		BufferedImage pbOut = HorizontalFiltering(srcBufferImage, w);
		BufferedImage pbFinalOut = VerticalFiltering(pbOut, h);
		return pbFinalOut;
	}

	/**
	 * 决定图像尺寸
	 */
	private int DetermineResultSize(int w, int h) {
		double scaleH, scaleV;
		scaleH = (double) w / (double) width;
		scaleV = (double) h / (double) height;
		// 需要判断一下scaleH,scaleV,不做放大操作
		if (scaleH >= 1.0 && scaleV >= 1.0) {
			return 1;
		}
		return 0;

	} // end of DetermineResultSize()

	private double Lanczos(int i, int inWidth, int outWidth, double Support) {
		double x;

		x = (double) i * (double) outWidth / (double) inWidth;

		return Math.sin(x * PI) / (x * PI) * Math.sin(x * PI / Support)
				/ (x * PI / Support);

	} // end of Lanczos()

	//  
	// Assumption: same horizontal and vertical scaling factor
	//  
	private void CalContrib() {
		nHalfDots = (int) ((double) width * support / (double) scaleWidth);
		nDots = nHalfDots * 2 + 1;
		try {
			contrib = new double[nDots];
			normContrib = new double[nDots];
			tmpContrib = new double[nDots];
		} catch (Exception e) {
			System.out.println("init   contrib,normContrib,tmpContrib" + e);
		}

		int center = nHalfDots;
		contrib[center] = 1.0;

		double weight = 0.0;
		int i = 0;
		for (i = 1; i <= center; i++) {
			contrib[center + i] = Lanczos(i, width, scaleWidth, support);
			weight += contrib[center + i];
		}

		for (i = center - 1; i >= 0; i--) {
			contrib[i] = contrib[center * 2 - i];
		}

		weight = weight * 2 + 1.0;

		for (i = 0; i <= center; i++) {
			normContrib[i] = contrib[i] / weight;
		}

		for (i = center + 1; i < nDots; i++) {
			normContrib[i] = normContrib[center * 2 - i];
		}
	} // end of CalContrib()

	// 处理边缘
	private void CalTempContrib(int start, int stop) {
		double weight = 0;

		int i = 0;
		for (i = start; i <= stop; i++) {
			weight += contrib[i];
		}

		for (i = start; i <= stop; i++) {
			tmpContrib[i] = contrib[i] / weight;
		}

	} // end of CalTempContrib()

	private int GetRedValue(int rgbValue) {
		int temp = rgbValue & 0x00ff0000;
		return temp >> 16;
	}

	private int GetGreenValue(int rgbValue) {
		int temp = rgbValue & 0x0000ff00;
		return temp >> 8;
	}

	private int GetBlueValue(int rgbValue) {
		return rgbValue & 0x000000ff;
	}

	private int ComRGB(int redValue, int greenValue, int blueValue) {

		return (redValue << 16) + (greenValue << 8) + blueValue;
	}

	// 行水平滤波
	private int HorizontalFilter(BufferedImage bufImg, int startX, int stopX,
			int start, int stop, int y, double[] pContrib) {
		double valueRed = 0.0;
		double valueGreen = 0.0;
		double valueBlue = 0.0;
		int valueRGB = 0;
		int i, j;

		for (i = startX, j = start; i <= stopX; i++, j++) {
			valueRGB = bufImg.getRGB(i, y);

			valueRed += GetRedValue(valueRGB) * pContrib[j];
			valueGreen += GetGreenValue(valueRGB) * pContrib[j];
			valueBlue += GetBlueValue(valueRGB) * pContrib[j];
		}

		valueRGB = ComRGB(Clip((int) valueRed), Clip((int) valueGreen),
				Clip((int) valueBlue));
		return valueRGB;

	} // end of HorizontalFilter()

	// 图片水平滤波
	private BufferedImage HorizontalFiltering(BufferedImage bufImage, int iOutW) {
		int dwInW = bufImage.getWidth();
		int dwInH = bufImage.getHeight();
		int value = 0;
		BufferedImage pbOut = new BufferedImage(iOutW, dwInH,
				BufferedImage.TYPE_INT_RGB);

		for (int x = 0; x < iOutW; x++) {

			int startX;
			int start;
			int X = (int) (((double) x) * ((double) dwInW) / ((double) iOutW) + 0.5);
			int y = 0;

			startX = X - nHalfDots;
			if (startX < 0) {
				startX = 0;
				start = nHalfDots - X;
			} else {
				start = 0;
			}

			int stop;
			int stopX = X + nHalfDots;
			if (stopX > (dwInW - 1)) {
				stopX = dwInW - 1;
				stop = nHalfDots + (dwInW - 1 - X);
			} else {
				stop = nHalfDots * 2;
			}

			if (start > 0 || stop < nDots - 1) {
				CalTempContrib(start, stop);
				for (y = 0; y < dwInH; y++) {
					value = HorizontalFilter(bufImage, startX, stopX, start,
							stop, y, tmpContrib);
					pbOut.setRGB(x, y, value);
				}
			} else {
				for (y = 0; y < dwInH; y++) {
					value = HorizontalFilter(bufImage, startX, stopX, start,
							stop, y, normContrib);
					pbOut.setRGB(x, y, value);
				}
			}
		}

		return pbOut;

	} // end of HorizontalFiltering()

	private int VerticalFilter(BufferedImage pbInImage, int startY, int stopY,
			int start, int stop, int x, double[] pContrib) {
		double valueRed = 0.0;
		double valueGreen = 0.0;
		double valueBlue = 0.0;
		int valueRGB = 0;
		int i, j;

		for (i = startY, j = start; i <= stopY; i++, j++) {
			valueRGB = pbInImage.getRGB(x, i);

			valueRed += GetRedValue(valueRGB) * pContrib[j];
			valueGreen += GetGreenValue(valueRGB) * pContrib[j];
			valueBlue += GetBlueValue(valueRGB) * pContrib[j];
			// System.out.println(valueRed+"->"+Clip((int)valueRed)+"<-");
			//  
			// System.out.println(valueGreen+"->"+Clip((int)valueGreen)+"<-");
			// System.out.println(valueBlue+"->"+Clip((int)valueBlue)+"<-"+"-->");
		}

		valueRGB = ComRGB(Clip((int) valueRed), Clip((int) valueGreen),
				Clip((int) valueBlue));
		// System.out.println(valueRGB);
		return valueRGB;

	} // end of VerticalFilter()

	private BufferedImage VerticalFiltering(BufferedImage pbImage, int iOutH) {
		int iW = pbImage.getWidth();
		int iH = pbImage.getHeight();
		int value = 0;
		BufferedImage pbOut = new BufferedImage(iW, iOutH,
				BufferedImage.TYPE_INT_RGB);

		for (int y = 0; y < iOutH; y++) {

			int startY;
			int start;
			int Y = (int) (((double) y) * ((double) iH) / ((double) iOutH) + 0.5);

			startY = Y - nHalfDots;
			if (startY < 0) {
				startY = 0;
				start = nHalfDots - Y;
			} else {
				start = 0;
			}

			int stop;
			int stopY = Y + nHalfDots;
			if (stopY > (int) (iH - 1)) {
				stopY = iH - 1;
				stop = nHalfDots + (iH - 1 - Y);
			} else {
				stop = nHalfDots * 2;
			}

			if (start > 0 || stop < nDots - 1) {
				CalTempContrib(start, stop);
				for (int x = 0; x < iW; x++) {
					value = VerticalFilter(pbImage, startY, stopY, start, stop,
							x, tmpContrib);
					pbOut.setRGB(x, y, value);
				}
			} else {
				for (int x = 0; x < iW; x++) {
					value = VerticalFilter(pbImage, startY, stopY, start, stop,
							x, normContrib);
					pbOut.setRGB(x, y, value);
				}
			}

		}

		return pbOut;

	} // end of VerticalFiltering()

	private int Clip(int x) {
		if (x < 0)
			return 0;
		if (x > 255)
			return 255;
		return x;
	}

	/**
	 * End: Use Lanczos filter to replace the original algorithm for image
	 * scaling. Lanczos improves quality of the scaled image modify by :blade
	 */

}
12 楼 ice123456 2007-12-24  
lszone 写道
用ImageMagick不好吗?这么麻烦

同意。。。一般有这个要求的项目都用它。ImageMagick支持一些简单图片操作

相关推荐

    基于Springmvc的上传图片并生成缩略图

    总结来说,基于Springmvc的图片上传和生成缩略图功能涉及以下几个关键步骤:配置Springmvc支持文件上传,编写Controller处理上传请求,生成并保存缩略图,以及与前端交互提供反馈。这些步骤都需要对Springmvc、文件I...

    java 上传图片生成缩略图

    ### Java 上传图片生成缩略图的知识点解析 在现代Web开发中,处理图像是一项常见的需求,尤其是在涉及用户上传图片的应用场景中。本篇文章将基于提供的代码片段详细讲解如何使用Java来实现上传图片并自动生成缩略图...

    jsp上传图片并生成缩略图

    在Java服务器页面(JSP)中,上传图片并生成缩略图是一项常见的需求,尤其在构建网站或Web应用时。这个过程涉及到多个步骤,包括文件上传、图片处理和存储。以下将详细介绍如何实现这一功能。 1. **文件上传**: -...

    JSP上传图片并生成缩略图

    在这个特定的场景中,"JSP上传图片并生成缩略图"是一个常见的功能需求,尤其是在开发包含用户交互和多媒体内容的Web应用时。下面我们将详细探讨这一技术实现的关键知识点。 首先,**上传组件**是Web应用中用于接收...

    上传图片并生成高清晰缩略图

    - 通过条件判断决定是基于宽度还是高度来生成缩略图。 6. **保存缩略图:** - 生成缩略图后,将其保存到指定路径下。 - 可以在文件名中加入特定标识符,例如“_thumb”,以便于区分原图和缩略图。 7. **返回...

    html5图片上传本地生成缩略图预览

    在图片上传场景中,这使得我们可以在用户选择图片后立即进行处理,例如生成缩略图。 2. **Canvas**:Canvas是HTML5的一个重要组成部分,它是一个可编程的图形区域,可以通过JavaScript来绘制图形。在图片预览和缩略...

    Asp.net上传图片同时生成缩略图和水印图

    在ASP.NET中,上传图片并生成缩略图和水印图是一项常见的需求,特别是在创建网站或者应用程序时,需要处理用户上传的图像。以下是一个关于如何在ASP.NET中实现这个功能的详细说明。 首先,上传图片是通过HTML的`...

    在ASP.NET中上传图片并生成缩略图

    ### 在ASP.NET中上传图片并生成缩略图 在Web应用开发中,处理用户上传的图片是一项常见的功能需求。尤其对于那些需要展示图像的应用(如博客、电子商务网站等),能够高效地处理这些图像,包括上传原始图片以及自动...

    PHP+FLASH批量上传图片并生成缩略图

    FLASH+PHP上传,返回值到当前页面,可以自定义传送值到PHP上传处理的页面,这样就可以定义接受图片...update.php逻辑处理,file_upload.php上传类,可定义源文件名或者随机命名和缩略图大小. 没分了,来赚点积分花花

    asp无组件上传图片,aspjpeg生成缩略图和添加水印.zip

    在这个"asp无组件上传图片,aspjpeg生成缩略图和添加水印.zip"压缩包中,包含了解决这一问题的代码示例。主要涉及到以下几个核心知识点: 1. **图片上传**: ASP可以通过表单提交实现图片文件的上传。用户选择本地...

    java批量上传图片并生成缩略图

    在Java编程环境中,批量上传图片并生成缩略图是一项常见的需求,特别是在开发Web应用时,例如内容管理系统或者论坛。这个任务通常涉及到文件处理、图像处理和服务器端编程等多个技术领域。接下来,我们将深入探讨...

    struts2图片上传并生成缩略图,展示缩略图点击显示大图

    在这个场景中,我们将关注如何使用Struts2框架结合FileUpload库来实现图片上传,并通过生成缩略图来优化用户体验。Struts2是一个流行的Java Web框架,它提供了一种结构化的方式来处理用户请求,而FileUpload则是处理...

    js实现上传图片即刻生成缩略图预览

    "js实现上传图片即刻生成缩略图预览"这个功能就是为了让用户体验更加流畅,允许他们在上传图片的同时立即查看预览效果,而无需等待完整的图片加载。这在处理大尺寸或者高分辨率图片时尤其有用,因为生成的缩略图可以...

    批量上传图片并生成缩略图java实现

    使用jspsmartupload实现图片的批量上传,并保存到服务器的指定路径,自动生成缩略图,与图片的路径相同。(需要导入jspsmartupload.jar,在工程下的WebContent\WEB-INF\lib中 )

    html5移动端图片上传本地生成缩略图预览(单图上传)

    预览图片后,我们可能还需要生成缩略图,以减小数据传输量或适应不同的展示尺寸。这里我们可以利用HTML5的Canvas元素。 1. 创建一个canvas元素,并获取其2D渲染上下文。 ```javascript var canvas = document....

    jSP上传图片生成缩略图

    在这个特定的场景中,"jSP上传图片生成缩略图"是一个常见的需求,尤其在网站开发中,如论坛、博客或电商网站等,用户可能需要上传图片,而为了提高页面加载速度和优化用户体验,通常会生成缩略图作为预览。...

    多图片上传-判断图片像素-生成缩略图

    接着,前端或后端生成缩略图并保存。对于大型网站或应用,为了提高效率,还可以采用异步处理,即先将原始图片存储,然后在后台生成缩略图。 文件名"myupload"可能指的是一个与多图片上传相关的文件,可能包含了实现...

    【ASP.NET编程知识】ASP.NET实现上传图片并生成缩略图的方法.docx

    ASP.NET 实现上传图片并生成缩略图的方法 该文档介绍了使用 ASP.NET 实现上传图片并生成缩略图的方法。首先,通过检查上传文件的格式是否有效,以确保上传的文件是图片格式。如果不是图片格式,則显示错误信息...

Global site tag (gtag.js) - Google Analytics