现在做的项目需要在上传图片的时候判断图片的大小然后进行压缩和分割。
比如说我上传图片判断图片的大小,并按照100*200的比例生成缩略图,如果上传的是200*400的图片就直接生成缩略图,如果图片是300*200的,就需要分割图片,取中间那块100*200区域的图片进行上传,剩余的不上传。如果图片是600*400的就取中间200*400的区域进行上传并生成缩略图。
还有一种办法就是,显示出整张图片,然后用鼠标选择需要显示的区域。这两种方法都没做过,请各位高手帮帮忙,给点思路,最好是有个例子,公司急着催,实在是没办法了,分不够可以再加。

解决方案 »

  1.   

    方法一:   使用Image的GetThumbnailImage   方法直接生成压缩图片,大概大概如此:       file://设置   原图片   对象的   EncoderParameters   对象,设置清晰度 
          ImageCodecInfo   ici   =   GetCodecInfo((string)htmimes[mFileExtName]); 
          EncoderParameters   parameters   =   new   EncoderParameters(1); 
          parameters.Param[0]   =   new   EncoderParameter(Encoder.Quality,lngDefinition);       System.Drawing.Image.GetThumbnailImageAbort   myCallback   =new   System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback); 
          System.Drawing.Image   myThumbnail   =   image.GetThumbnailImage(intNewWidth,   intNewHeight,   myCallback,   IntPtr.Zero); 
        myThumbnail.Save(txtNewPath,   ici,   parameters); 
      

  2.   

    方法二:   使用Graphics   重新绘制图象       ImageCodecInfo   ici   =   GetCodecInfo((string)htmimes[mFileExtName]); 
          EncoderParameters   parameters   =   new   EncoderParameters(1); 
          parameters.Param[0]   =   new   EncoderParameter(Encoder.Quality,lngDefinition);       Bitmap   objNewBitMap   =   new   Bitmap(intNewWidth,   intNewHeight,   PixelFormat.Format32bppArgb); 
          //从指定的   Image   对象创建新   Graphics   对象 
          Graphics   objGraphics   =   Graphics.FromImage(objNewBitMap); 
          //清除整个绘图面并以透明背景色填充 
          objGraphics.Clear(Color.Transparent); 
          //在指定位置并且按指定大小绘制   原图片   对象 
          objGraphics.DrawImage(image,   new   Rectangle(0,   0,   intNewWidth,   intNewHeight)); 
          objNewBitMap.Save(txtNewPath   +   txtNewFileName+ ". "+mFileExtName,   ici,   parameters);   注意lngDefinition是调整清晰度的LONG型参数,一般50-90   就很清晰了。