Office中国论坛/Access中国论坛
标题:
JPG图片处理 [已解决]
[打印本页]
作者:
beenet
时间:
2008-8-5 13:13
标题:
JPG图片处理 [已解决]
现在做一个模块,想对JPG图片尺寸修改,减少体积。网游多日无果,要不只能在VB下使用。不知谁能提供帮助。
小弟不甚感激
[
本帖最后由 beenet 于 2008-9-22 08:34 编辑
]
作者:
ui
时间:
2008-8-5 14:32
有现成的工具,优化图片.搜索一下百度
作者:
fan0217
时间:
2008-8-5 14:35
生成缩微图,.NET很容易解决,但Acc就显得很困难了。
作者:
ui
时间:
2008-8-5 14:51
.net如何解决,是否有内置功能?
作者:
fan0217
时间:
2008-8-5 14:59
自己根据实际需要更改一下:
C#
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
/// <summary>
/// 生成缩略图
/// </summary>
/// <param name="originalImagePath">源图路径(物理路径)</param>
/// <param name="thumbnailPath">缩略图路径(物理路径)</param>
/// <param name="width">缩略图宽度</param>
/// <param name="height">缩略图高度</param>
/// <param name="mode">生成缩略图的方式</param>
public void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
{
System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);
int towidth = width;
int toheight = height;
int x = 0;
int y = 0;
int ow = originalImage.Width;
int oh = originalImage.Height;
switch (mode)
{
case "HW"://指定高宽缩放(可能变形)
break;
case "W"://指定宽,高按比例
toheight = originalImage.Height * width / originalImage.Width;
break;
case "H"://指定高,宽按比例
towidth = originalImage.Width * height / originalImage.Height;
break;
case "Cut"://指定高宽裁减(不变形)
if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
{
oh = originalImage.Height;
ow = originalImage.Height * towidth / toheight;
y = 0;
x = (originalImage.Width - ow) / 2;
}
else
{
ow = originalImage.Width;
oh = originalImage.Width * height / towidth;
x = 0;
y = (originalImage.Height - oh) / 2;
}
break;
default:
break;
}
//新建一个bmp图片
System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
//新建一个画板
Graphics g = System.Drawing.Graphics.FromImage(bitmap);
//设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
//设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//清空画布并以透明背景色填充
g.Clear(Color.Transparent);
//在指定位置并且按指定大小绘制原图片的指定部分
g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),
new Rectangle(x, y, ow, oh),
GraphicsUnit.Pixel);
try
{
//以jpg格式保存缩略图
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch (System.Exception e)
{
throw e;
}
finally
{
originalImage.Dispose();
bitmap.Dispose();
g.Dispose();
}
}
复制代码
VB.Net
Imports System
Imports System.Data
Imports System.Configuration
Imports System.Collections
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Web.UI.HtmlControls
Imports System.Drawing
'''<summary>
'''生成缩略图
'''</summary>
'''<param name="originalImagePath">源图路径(物理路径)</param>
'''<param name="thumbnailPath">缩略图路径(物理路径)</param>
'''<param name="width">缩略图宽度</param>
'''<param name="height">缩略图高度</param>
'''<param name="mode">生成缩略图的方式</param>
Sub MakeThumbnail(ByVal originalImagePath As String, ByVal thumbnailPath As String, ByVal width As Integer, ByVal height As Integer, ByVal mode As String)
Dim originalImage As System.Drawing.Image = System.Drawing.Image.FromFile(originalImagePath)
Dim towidth As Integer = width
Dim toheight As Integer = height
Dim x As Integer = 0
Dim y As Integer = 0
Dim ow As Integer = originalImage.Width
Dim oh As Integer = originalImage.Height
Select Case mode
Case "HW" '指定高宽缩放(可能变形)
Case "W" '指定宽,高按比例
toheight = originalImage.Height * width / originalImage.Width
Case "H" '指定高,宽按比例
towidth = originalImage.Width * height / originalImage.Height
Case "Cut" '指定高宽裁减(不变形)
If CDbl(originalImage.Width) / CDbl(originalImage.Height) > CDbl(towidth) / CDbl(toheight) Then
oh = originalImage.Height
ow = originalImage.Height * towidth / toheight
y = 0
x = (originalImage.Width - ow) / 2
Else
ow = originalImage.Width
oh = originalImage.Width * height / towidth
x = 0
y = (originalImage.Height - oh) / 2
End If
Case Else
End Select
'新建一个bmp图片
Dim bitmap As New System.Drawing.Bitmap(towidth, toheight)
'新建一个画板
Dim g As Graphics = System.Drawing.Graphics.FromImage(bitmap)
'设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High
'设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality
'清空画布并以透明背景色填充
g.Clear(Color.Transparent)
'在指定位置并且按指定大小绘制原图片的指定部分
g.DrawImage(originalImage, New Rectangle(0, 0, towidth, toheight), New Rectangle(x, y, ow, oh), GraphicsUnit.Pixel)
Try
'以jpg格式保存缩略图
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg)
Catch e As System.Exception
Throw e
Finally
originalImage.Dispose()
bitmap.Dispose()
g.Dispose()
End Try
End Sub
复制代码
作者:
ui
时间:
2008-8-5 15:02
呵呵,这么全,看来要了解一下.net 谢谢
作者:
beenet
时间:
2008-8-5 16:14
感谢大家 实际这个问题围绕多长久了 网络上基本没有好的方法实现
找到最好的是XAT出的控件,但苦于没有破解流传。
不知坛中能否有高手破解一下此控件。
[attach]31403[/attach]
作者:
fan0217
时间:
2008-8-5 16:57
其实AcdSee就是个很好的工具,何必舍近求远呢?
作者:
ui
时间:
2008-8-5 17:04
可能控件,可以自己来批量转. Acdsee可能不好控制
作者:
086-china
时间:
2008-8-6 11:37
用PHOTOSHOP专业点
作者:
beenet
时间:
2008-8-6 12:39
工具软件没法做到程序中啊!
我做的是一个异常情况记录模块,由于每天保存图片量大,所以需要在图片文件保存到数据库中时自动进行处理,尺寸减小一半,苦于没有好的控件或可用于VBA中的代码。
作者:
fan0217
时间:
2008-9-22 07:05
上面提供的代码生成com类,acc可以引用使用的。
作者:
beenet
时间:
2008-9-22 08:33
解决了 我使用了360系列的控件
http://www.office-cn.net/vvb/thread-63778-1-1.html
谢谢!
作者:
zzcjp
时间:
2008-11-5 10:56
采用免费的光影魔术手:nEO iMAGING,转换图片格式,压缩图片尺寸、调整图片像素、自动批处理,很方便。
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3