请教关于图片裁剪时,如何实现自定义裁剪方向的问题

hero2964 2008-05-19 04:02:09
现在需要实现一个手机图片下载的功能,大概需求是后台不分尺寸上传原图(原图尺寸一般情况下均大于手机屏幕大小),前台页面用户输入自己手机屏幕尺寸下载,下载前程序自动等比率缩小并裁剪成用户所需尺寸保存在服务器供用户下载!
目前基本功能已实现,目前的设计是如果等比率缩小后需要裁掉一部分来适合手机屏幕则默认保留左上方部分,裁掉右下部分。但又发现这样裁剪的精度不够,经常出现人物被裁掉一半的情况,急需改进。
现在打算改进如下:后台上传原图时,根据原图画面布局情况,选择裁剪方向(如:裁掉左上,左下,右上,右下),并记录在数据库相应字段中,前台用户输入尺寸下载前,以输入尺寸的宽或高为基准(以较长的为基准)自动等比例缩小,若缩小后不满足手机尺寸,则按数据库中记录的裁剪方向裁剪,以达到人工控制裁剪精度的目的。

问题:如何利用DrawImage()方法来实现自定义方向裁剪?
希望各位高手指教,或提供更为简便可行的方案来提高裁剪的精度,第一次发帖暂无分可给,以后努力打工赚分偿还,小弟先行作揖了! ^_^

下面提供小弟目前默认裁剪右下部分的方法源码,请各位看官多多改进,指教,小弟感激不尽……

Public Sub Dram(ByVal p_img_Original As Image, ByVal p_int_Width As Integer, ByVal p_int_Height As Integer)
Dim l_int_OriWidth As Integer = p_img_Original.Width
Dim l_int_OriHeight As Integer = p_img_Original.Height
Dim l_int_IntWidth As Integer = 0
Dim l_int_IntHeight As Integer = 0
Dim l_int_OffsetX As Integer = 0
Dim l_int_OffsetY As Integer = 0

' 以寬度為基準,保持寬高比計算縮放之後的高度
l_int_IntWidth = p_int_Width
l_int_IntHeight = l_int_OriHeight * l_int_IntWidth / l_int_OriWidth

' 如果縮放之後的高度不夠新高度,則改用以高度為基準,保持寬高比計算縮放之後的寬度
If l_int_IntHeight < p_int_Height Then
l_int_IntHeight = p_int_Height
l_int_IntWidth = l_int_OriWidth * l_int_IntHeight / l_int_OriHeight

' 計算圖片偏移位置
Else
' 計算圖片偏移位置
l_int_OffsetY = (p_int_Height - l_int_IntHeight) / 4 ' 垂直居中偏上
End If

' 準備畫布
Dim l_bmp_New As Bitmap = New Bitmap(p_int_Width, p_int_Height)
Dim l_gph_New As Graphics = Graphics.FromImage(l_bmp_New)
l_gph_New.InterpolationMode = InterpolationMode.High
l_gph_New.SmoothingMode = SmoothingMode.HighQuality
l_gph_New.Clear(Color.Transparent)

' 生成圖片
l_gph_New.DrawImage(p_img_Original, New Rectangle(l_int_OffsetX, l_int_OffsetY, l_int_IntWidth, l_int_IntHeight))

'输出图片
'prepare output stream buffer
Dim l_ms_Buffer As MemoryStream = New MemoryStream()
l_bmp_New.Save(l_ms_Buffer, ImageFormat.Jpeg)
' output to browser
HttpContext.Current.Response.Clear()
HttpContext.Current.Response.ContentType = "image/jpeg"
HttpContext.Current.Response.BinaryWrite(l_ms_Buffer.ToArray())
End Sub
...全文
113 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
mygodsos 2008-12-13
  • 打赏
  • 举报
回复
路过帮顶
=============
11月6日,论坛升级公告,积分已经做了调整!
http://topic.csdn.net/u/20081107/11/b27dc75f-14b1-4594-9de3-5b18d9e36a11.html
此次调整增加了两个新的可用分获取渠道:
1:帖子被推荐(加精)后,帖主可以获得88分的可用分奖励;
2:帖子结帖后会返还帖主50%的悬赏分,无满意结帖不返还分数;
3:接下来会不断增加新的可用分获取途径,比如参与活动赠送等,请大家多关注;

16,717

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧