按比例保存图片

 
ToThumbnailImage.aspx
<%@ Page language="c#" Codebehind="ToThumbnailImage.aspx.cs" AutoEventWireup="false" Inherits="AjaxTest.ToThumbnailImage" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
 <HEAD>
  <title>ToThumbnailImage</title>
  <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
  <meta content="C#" name="CODE_LANGUAGE">
  <meta content="JavaScript" name="vs_defaultClientScript">
  <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
 </HEAD>
 <body MS_POSITIONING="GridLayout">
  <form id="Form2" method="post" runat="server">
   <FONT face="宋体">
    <asp:Button id="Button1" style="Z-INDEX: 100; LEFT: 32px; POSITION: absolute; TOP: 56px" runat="server"
     Text="生成图片"></asp:Button>
    <asp:Label id="Label2" style="Z-INDEX: 106; LEFT: 160px; POSITION: absolute; TOP: 344px" runat="server">现图:</asp:Label>
    <asp:Image id="Image1" style="Z-INDEX: 101; LEFT: 224px; POSITION: absolute; TOP: 24px" runat="server"
     ImageUrl="images/lionsky.jpg" Width="400px"></asp:Image>
    <asp:Image id="Image2" style="Z-INDEX: 102; LEFT: 224px; POSITION: absolute; TOP: 344px" runat="server"
     ImageUrl="images/lionsky.jpg"></asp:Image>
    <asp:TextBox id="imgWidth" style="Z-INDEX: 103; LEFT: 24px; POSITION: absolute; TOP: 24px" runat="server"
     Width="88px"></asp:TextBox>
    <asp:Label id="Label1" style="Z-INDEX: 105; LEFT: 152px; POSITION: absolute; TOP: 24px" runat="server">原图:</asp:Label></FONT>
  </form>
 </body>
</HTML>

ToThumbnailImage.aspx.cs
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Drawing.Imaging;

namespace AjaxTest
{
 /// <summary>
 /// ToThumbnailImage 的摘要说明。
 /// </summary>
 public class ToThumbnailImage : System.Web.UI.Page
 {
  protected System.Web.UI.WebControls.Button Button1;
  protected System.Web.UI.WebControls.Label Label2;
  protected System.Web.UI.WebControls.Image Image1;
  protected System.Web.UI.WebControls.Image Image2;
  protected System.Web.UI.WebControls.TextBox imgWidth;
  protected System.Web.UI.WebControls.Label Label1;
  static Hashtable htmimes=new Hashtable();
  internal readonly string AllowExt = ".jpe|.jpeg|.jpg|.png|.tif|.tiff|.bmp";
 
  private void Page_Load(object sender, System.EventArgs e)
  {
  }

  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   #region htmimes[".jpe"]="image/jpeg";
   htmimes[".jpeg"]="image/jpeg";
   htmimes[".jpg"]="image/jpeg";  
   htmimes[".png"]="image/png";  
   htmimes[".tif"]="image/tiff";
   htmimes[".tiff"]="image/tiff";
   htmimes[".bmp"]="image/bmp";
   #endregion

   InitializeComponent();
   base.OnInit(e);
  }
  
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {   
   this.Button1.Click += new System.EventHandler(this.Button1_Click);
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion

  #region Helper

  /// <summary>
  /// 获取图像编码解码器的所有相关信息
  /// </summary>
  /// <param name="mimeType">包含编码解码器的多用途网际邮件扩充协议 (MIME) 类型的字符串</param>
  /// <returns>返回图像编码解码器的所有相关信息</returns>
  static ImageCodecInfo GetCodecInfo(string mimeType)
  {
   ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();
   foreach(ImageCodecInfo ici in CodecInfo)
   {
    if(ici.MimeType == mimeType)return ici;
   }
   return null;
  }

  /// <summary>
  /// 检测扩展名的有效性
  /// </summary>
  /// <param name="sExt">文件名扩展名</param>
  /// <returns>如果扩展名有效,返回true,否则返回false.</returns>
  bool CheckValidExt(string sExt)
  {  
   bool flag=false;
   string[] aExt = AllowExt.Split('|');
   foreach(string filetype in aExt)
   {
    if(filetype.ToLower()==sExt)
    {
     flag = true;
     break;
    }
   }  
   return flag;
  }

  /// <summary>
  /// 保存图片
  /// </summary>
  /// <param name="image">Image 对象</param>
  /// <param name="savePath">保存路径</param>
  /// <param name="ici">指定格式的编解码参数</param>
  void SaveImage(System.Drawing.Image image,string savePath,ImageCodecInfo ici)
  {
   //设置 原图片 对象的 EncoderParameters 对象
   EncoderParameters parameters = new EncoderParameters(1);
   parameters.Param[0] = new EncoderParameter(Encoder.Quality, ((long) 90));
   image.Save(savePath, ici, parameters);
   parameters.Dispose();
  }
  #endregion

  #region Methods

  /// <summary>
  /// 生成缩略图
  /// </summary>
  /// <param name="sourceImagePath">原图片路径(相对路径)</param>
  /// <param name="thumbnailImagePath">生成的缩略图路径,如果为空则保存为原图片路径(相对路径)</param>
  /// <param name="thumbnailImageWidth">缩略图的宽度(高度与按源图片比例自动生成)</param>
  public void ToThumbnailImages(string sourceImagePath,string thumbnailImagePath,int thumbnailImageWidth)
  {
   string SourceImagePath = sourceImagePath;
   string ThumbnailImagePath = thumbnailImagePath;
   int ThumbnailImageWidth = thumbnailImageWidth;
   string sExt = SourceImagePath.Substring(SourceImagePath.LastIndexOf(".")).ToLower();
   if(SourceImagePath.ToString()==System.String.Empty) throw new NullReferenceException("SourceImagePath is null!");
   if(!CheckValidExt(sExt))
   {
    throw new ArgumentException("原图片文件格式不正确,支持的格式有[ "+ AllowExt +" ]","SourceImagePath");
   }
   //从 原图片 创建 Image 对象
   System.Drawing.Image image = System.Drawing.Image.FromFile(HttpContext.Current.Server.MapPath

    (SourceImagePath)); 
   int num = ((ThumbnailImageWidth / 4) * 3);
   int width = image.Width;
   int height = image.Height;
   //计算图片的比例
   if ((((double) width) / ((double) height)) >= 1.3333333333333333f)
   {
    num = ((height * ThumbnailImageWidth) / width);
   }
   else
   {
    ThumbnailImageWidth = ((width * num) / height);
   }
   if ((ThumbnailImageWidth < 1) || (num < 1))
   {
    return;
   }
   //用指定的大小和格式初始化 Bitmap 类的新实例
   Bitmap bitmap = new Bitmap(ThumbnailImageWidth, num, PixelFormat.Format32bppArgb);
   //从指定的 Image 对象创建新 Graphics 对象
   Graphics graphics = Graphics.FromImage(bitmap);
   //清除整个绘图面并以透明背景色填充
   graphics.Clear(Color.Transparent);
   //在指定位置并且按指定大小绘制 原图片 对象
   graphics.DrawImage(image, new Rectangle(0, 0, ThumbnailImageWidth, num));
   image.Dispose();   
   try
   {  
    //将此 原图片 以指定格式并用指定的编解码参数保存到指定文件
    string savepath = (ThumbnailImagePath==null?SourceImagePath:ThumbnailImagePath); 
    SaveImage(bitmap,HttpContext.Current.Server.MapPath(savepath),GetCodecInfo((string)htmimes

     [sExt]));
   }
   catch(System.Exception e)
   {
    throw e;
   }
   finally
   {
    bitmap.Dispose();     
    graphics.Dispose();
   }
  }
  #endregion

  private void Button1_Click(object sender, System.EventArgs e)
  {
   Random ran =new Random();
   int filenameappend = ran.Next(2000000000);

   ToThumbnailImages("images//lionsky.jpg","images//"+filenameappend.ToString()+"change.jpg",Convert.ToInt32(imgWidth.Text));
            Image2.ImageUrl = "images//"+filenameappend.ToString()+"change.jpg";
  }
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Java 中的 ImageIO 和 BufferedImage 类来实现按宽度等比例压缩图片的功能。具体实现步骤如下: 1. 使用 ImageIO 类的 read 方法读取原始图片文件,并将其保存为 BufferedImage 对象。 2. 获取原始图片的宽度和高度。 3. 计算等比例缩小后的宽度和高度,其中宽度为指定的压缩宽度,高度按比例计算。 4. 创建一个新的 BufferedImage 对象,设置其宽度和高度为计算出来的缩小后的宽度和高度。 5. 使用 Graphics2D 类的 drawImage 方法将原始图片绘制到新的 BufferedImage 对象上,并按比例缩小。 6. 使用 ImageIO 类的 write 方法将新的 BufferedImage 对象保存为压缩后的图片文件。 下面是一个简单的 Java 代码示例: ```java import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; public class ImageCompressor { public static void compressImage(String srcFilePath, String destFilePath, int width) throws Exception { // 读取原始图片文件 BufferedImage srcImage = ImageIO.read(new File(srcFilePath)); // 获取原始图片的宽度和高度 int srcWidth = srcImage.getWidth(); int srcHeight = srcImage.getHeight(); // 计算等比例缩小后的宽度和高度 int destWidth = width; int destHeight = (int) (srcHeight * ((double) destWidth / srcWidth)); // 创建一个新的 BufferedImage 对象 BufferedImage destImage = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB); // 绘制原始图片到新的 BufferedImage 对象上,并按比例缩小 Graphics2D g = destImage.createGraphics(); g.drawImage(srcImage, 0, 0, destWidth, destHeight, null); g.dispose(); // 保存压缩后的图片文件 ImageIO.write(destImage, "jpg", new File(destFilePath)); } public static void main(String[] args) throws Exception { compressImage("original.jpg", "compressed.jpg", 800); } } ``` 上面的代码将原始图片文件 "original.jpg" 压缩成宽度为 800 像素的图片,并保存为 "compressed.jpg" 文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值