图片压缩的问题

iceMung 2013-09-02 06:16:07
        byte[] b;
using (Bitmap bmp = new Bitmap(image))
{
b = PictureProvider.GetBytes(bmp);
}
...
using (Bitmap bmp = new Bitmap(image, image.Width - 100, image.Height - 100))
{
b = PictureProvider.GetBytes(bmp); //为什么这个b在一些情况下反而会大于上面那个b
}


        public static byte[] GetBytes(Image image)
{
if (image == null) return null;
using (MemoryStream ms = new MemoryStream())
{
image.Save(ms, ImageFormat.Jpeg);
return ms.ToArray();
}
}


摸索了好久,总是不得图片压缩的要领,现在想对二进制形式的图片进行指定大小的压缩,如果有成熟的方法或者例子,请告知一下,先谢过了~
...全文
212 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
人生导师 2013-09-06
  • 打赏
  • 举报
回复
maysoft 2013-09-06
  • 打赏
  • 举报
回复
我觉得首先要确认你是为了传送压缩?还是就想减少图片本身的文件大小?如果是减少本身大小,那要注意牺牲图片质量或者尺寸接受的最低程度
卧_槽 2013-09-05
  • 打赏
  • 举报
回复
引用 10 楼 iceMung 的回复:
[quote=引用 9 楼 yuwenge 的回复:] ...
上面给的需求是只通过改变图片的Width和Height,来把所有图片(无论什么图片)压缩到统一文件大小。 如果通过设置质量来压缩,那么将一张10MB的图片压缩到300KB,需要如何进行?[/quote] 我估计上面没那么傻,肯定是要你压缩到统一的图片尺寸。 图片文件的大小和图片文件格式,图片文件尺寸,图片本身内容丰富程度,以及某些格式下图片质量相关。 你的要求是300K,这个要求几乎没法完成,因为你没法控制图片本身内容,这样就没法精确确定图片文件到底有多大。 不知道你明白了多少。 还是先把我说的那3章书读完再来问吧。
iceMung 2013-09-05
  • 打赏
  • 举报
回复
引用 9 楼 yuwenge 的回复:
...
上面给的需求是只通过改变图片的Width和Height,来把所有图片(无论什么图片)压缩到统一文件大小。 如果通过设置质量来压缩,那么将一张10MB的图片压缩到300KB,需要如何进行?
卧_槽 2013-09-04
  • 打赏
  • 举报
回复
引用 8 楼 iceMung 的回复:
[quote=引用 6 楼 yuwenge 的回复:] 直接save成png就完了,废那些破事干嘛。
“png”貌似不能解决问题吧~[/quote] 首先不明白你的问题到底是什么,指定大小的压缩是什么意思?是无论什么图片必须都压缩到统一的文件大小么?那必然会带来质量的损失。 png是对图片数据的无损压缩。如果可以有损压缩那就用jpg设置质量就行了。
卧_槽 2013-09-03
  • 打赏
  • 举报
回复
直接save成png就完了,废那些破事干嘛。
全栈极简 2013-09-03
  • 打赏
  • 举报
回复
iceMung 2013-09-03
  • 打赏
  • 举报
回复
求帮助....
jiaoshiyao 2013-09-03
  • 打赏
  • 举报
回复
引用 2 楼 iceMung 的回复:
。。。你是要问为什么要大啊。。。 bitmap有一个缓冲区。。貌似和他有关系 还有你获取byte的时候别用这种方法 从网上找找 有一种可以获取byte[]数组的方法 可能是你的这种方法有问题
iceMung 2013-09-03
  • 打赏
  • 举报
回复
引用 1 楼 jiaoshiyao 的回复:
压缩还是改质量 改质量之后 图片会变小 http://www.usingdll.com/7623.html 一般都是质量变成27的 如果你要压缩的话直接bitmap map = new bitmap(源图片,400,300); 这样修改大小你在传送的时候会小不少的传输量
你还是没解决我对于那行绿字的疑惑~
iceMung 2013-09-03
  • 打赏
  • 举报
回复
引用 6 楼 yuwenge 的回复:
直接save成png就完了,废那些破事干嘛。
“png”貌似不能解决问题吧~
iceMung 2013-09-03
  • 打赏
  • 举报
回复
引用 5 楼 guwei4037 的回复:
refer: http://blog.csdn.net/chinacsharper/article/details/9865491 最后有小例子下载。
我只是希望通过调整图片的宽高来实现图片压缩,图片的来源和最终结果都是二进制数据,并不希望涉及到具体的图片文件。而且我想要实现的是限定大小的压缩,即所有图片进来我都把他压缩到一个大小以内,比如100KB。您能给点建议不?
jiaoshiyao 2013-09-02
  • 打赏
  • 举报
回复
压缩还是改质量 改质量之后 图片会变小 http://www.usingdll.com/7623.html 一般都是质量变成27的 如果你要压缩的话直接bitmap map = new bitmap(源图片,400,300); 这样修改大小你在传送的时候会小不少的传输量

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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