实现类似CSDN里上传头像的时候的那种图片裁剪的功能,该怎么做

dylzwb 2009-12-17 09:10:19
我现在想要实现这样一个功能:用户从本地读取了一张图片后,我能在网上对他进行规定尺寸的裁剪。就像CSDN里用户上传头像时用到的那种裁剪图片的功能。大家懂的,希望能给个思路,到底该怎么做,最好能说明下几个关键类或关键方法,谢了~
...全文
275 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dylzwb 2009-12-18
  • 打赏
  • 举报
回复
谢小马哥指点~~
a19895161989516 2009-12-17
  • 打赏
  • 举报
回复 1
这个是将图片上传到数据库,有一个上传控件,分别将图片压缩成600大小,198,100,大小,和原始大小,
下面是怎么将图片转换成二进制上传到数据库,如果会了就不用了,不是很难,上面的 已经得到图片的二进流了,整个流程是 单击按钮式事件,btbOk_Click(object sender, EventArgs e)
1.调用AddPhoto(图片所属相册,图片名,图片的二进流)
2.AddPhoto调用ResizeImageFile(图片的二进流,目标大小)方法 目标大小你可以自己设你想要的大小
3.ResizeImageFile调用CalculateDimensions方法(原始大小,目标大小)

按照上面的执行过程理解起来还是比较容易的呵呵!!!

protected void btbOk_Click(object sender, EventArgs e)
{
Stream imgDataStream = fuUpImage.PostedFile.InputStream;
int imgDataLen = fuUpImage.PostedFile.ContentLength;
string Caption =tbImageName.Text;
byte[] BytesOriginal = new byte[imgDataLen];
int n = imgDataStream.Read(BytesOriginal, 0, imgDataLen);
int numberAlbum =1;
numberAlbum = Convert.ToInt32(ddlAlbum.SelectedItem.Value);
AddPhoto(numberAlbum, Caption, BytesOriginal);
Label1.Text = Caption + ":图片已经上传成功";
}

//添加一张图片
//所属相册,照片名,文件的二进制流


public static void AddPhoto(int AlbumID, string Caption, byte[] BytesOriginal)
{

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["Personal"].ConnectionString);
string sql;
sql = "INSERT INTO [Photos] ( [AlbumID], [BytesOriginal], [Caption], [BytesFull], [BytesPoster], [BytesThumb] ) "
+ "VALUES ( @AlbumID, @BytesOriginal,@Caption,@BytesFull, @BytesPoster, @BytesThumb ) ";

SqlCommand command = new SqlCommand(sql, connection);

command.Parameters.Add(new SqlParameter("@AlbumID", AlbumID));
command.Parameters.Add(new SqlParameter("@Caption", Caption));
command.Parameters.Add(new SqlParameter("@BytesOriginal", BytesOriginal));
command.Parameters.Add(new SqlParameter("@BytesFull", ResizeImageFile(BytesOriginal, 600)));
command.Parameters.Add(new SqlParameter("@BytesPoster", ResizeImageFile(BytesOriginal, 198)));
command.Parameters.Add(new SqlParameter("@BytesThumb", ResizeImageFile(BytesOriginal, 100)));
connection.Open();
command.ExecuteNonQuery();
}



声明一下这个实现 QQ相册的类似功能的!!!
dylzwb 2009-12-17
  • 打赏
  • 举报
回复
2楼的能将下思路吗?而且你贴的代码貌似涵盖不太全
a19895161989516 2009-12-17
  • 打赏
  • 举报
回复
Size类
_0筱筱0_ 2009-12-17
  • 打赏
  • 举报
回复
恩 学习了...楼上的方法试试....
a19895161989516 2009-12-17
  • 打赏
  • 举报
回复
//实现图片的大小转换,调用CalculateDimensions方法计算图片的大小
//相册的二进制文件,要转换的大小
private static byte[] ResizeImageFile(byte[] imageFile, int targetSize)
{

System.Drawing.Image oldImage = System.Drawing.Image.FromStream(new MemoryStream(imageFile));
Size newSize = CalculateDimensions(oldImage.Size, targetSize);
Bitmap newImage = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format24bppRgb);

Graphics canvas = Graphics.FromImage(newImage);
canvas.SmoothingMode = SmoothingMode.AntiAlias;
canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
canvas.PixelOffsetMode = PixelOffsetMode.HighQuality;
canvas.DrawImage(oldImage, new Rectangle(new Point(0, 0), newSize));
MemoryStream m = new MemoryStream();
newImage.Save(m, ImageFormat.Jpeg);
return m.GetBuffer();
}
//计算图片的大小
//原始大小,目标大小
private static Size CalculateDimensions(Size oldSize, int targetSize)
{
Size newSize = new Size();
if (oldSize.Height > oldSize.Width)
{
newSize.Width = (int)(oldSize.Width * ((float)targetSize / (float)oldSize.Height));
newSize.Height = targetSize;
}
else
{
newSize.Width = targetSize;
newSize.Height = (int)(oldSize.Height * ((float)targetSize / (float)oldSize.Width));
}
return newSize;
}

62,254

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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