一张图片在网络传播图片上大量传播后失真能有多严重

怎么确认图片失真_百度知道
怎么确认图片失真
是这样的 我们要做的一张图很大 宽有80CM 高有100CM
在PS里面看不出会不会失真 请问能有什么办法确定不失真吗
我有更好的答案
看尺寸是做喷绘输出的,把文件给喷绘公司,打1个小样和1:1局部来校对颜色
我现在有一些JPG格式的高清素材图 可是我们要求的作业时矢量图 我能够在自己的电脑上判断失真与否吗
所谓不失真是指显示设备与输出设备色彩一致。事实上无论在显示设备还是输出设备,我们可以说1万台设备就有1万种颜色。我们只能靠反复输出来校准颜色。因此你无法单独在你的电脑上判断颜色失真。
采纳率:70%
  看尺寸是做喷绘输出的,把文件给喷绘公司,打1个小样和1:1局部来校对颜色.  所谓不失真是指显示设备与输出设备色彩一致。事实上无论在显示设备还是输出设备,可以说1万台设备就有1万种颜色。只能靠反复输出来校准颜色。因此无法单独在电脑上判断颜色失真。
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。蜂鸟手机端
&器材讨论区
&论坛服务区
为什么图片上传到论坛后,色彩严重失真?
共2页到第页
想在论坛发图,可是上传图片后,发现照片色彩严重失真(如本人放在论坛上的个性图片,倒影上的宝石蓝已经变成可恶的紫色).请问各位:为什么?怎么解决?
IP地址:110.142.178.122
压缩压缩再压缩。
IP地址:171.221.132.75
不明白??对不起,什么意思?图片已经是压缩后才上传的呀.
压缩压缩再压缩。
IP地址:110.142.178.122
难道真没有更多朋友愿意回答此问题吗?
IP地址:110.142.178.122
你使用什么色域标准?
IP地址:112.112.120.64
色彩空间要设为sRGB保存就不会变了
IP地址:10.15.187.75
估计是用AdobeRGB调的
IP地址:106.37.236.185
最终存盘时转为SRGB,换了不同的服务器,仍没有用,而在其他网站上发图,有的就没有问题.
5楼色界2012
你使用什么色域标准?
IP地址:110.142.178.122
存盘时转为SRGB,换了不同的服务器,均没有用.
5楼色界2012
你使用什么色域标准?
IP地址:110.142.178.122
处理完后用SRGB,换了不同服务器,均没有用.
6楼潮州卤水
色彩空间要设为sRGB保存就不会变了
yingjie20049
想在论坛发图,可是上传图片后,发现照片色彩严重失真(如本人放在论坛上的个性图片,倒影上的宝石蓝已经变成可恶的紫色).请问各位:为什么?怎么解决?
IP地址:110.142.178.122
共2页到第页
5 : 绝对精彩
4 : 值得收藏
0标签限制6个
0图片最多能上传40张
0宽度不小于640px,高度不小于320px
0正在发帖请稍候
热门主题:
微信请扫二维码
0广告、垃圾营销信息
0淫秽、色情
0虚假不属实的信息
0盗用他人图片
0与本版块主题无关的内容
0发布广告信息(新ID建议永禁)
0发布色情内容
0发布他人隐私信息
0不和谐言论或人身攻击
0发布与本版块主题无关的内容
0盗用他人图片等版权问题
0主题、回复灌水
0言语攻击版主行为
0发布反动言论
0广告、垃圾营销信息
0淫秽、色情
0不友好评论、人身攻击
0虚假不属实的信息
0协助楼主删除
0与本版块主题无关的内容
0盗用他人图片
0广告、垃圾营销信息
0淫秽、色情
0不友好评论、人身攻击
0虚假不属实的信息
0协助楼主删除
0与本版块主题无关的内容
0盗用他人图片
0发布广告信息(新ID建议永禁)
0发布色情内容
0发布他人隐私信息
0不和谐言论或人身攻击
0发布与本版块主题无关的内容
0盗用他人图片等版权问题
0主题、回复灌水
0言语攻击版主行为
0发布反动言论
0我是楼主,我要删帖
已选择 1 个帖子,只能在您有权限的版块之间操作。
原板块:尼康
目标板块:
请选择目标板块
测试小版块
索尼α影像Club
135画幅相机系统
单反相机和镜头
村里摄影版
旁轴及其他相机和镜头
鸟类摄影佳作欣赏
中、大画幅相机系统
器材交流区
无反相机和镜头
鸟类摄影作品交流
意见问题反馈区
固定镜头相机
鸟类摄影技术探讨
鸟类摄影拍鸟地图
呼和浩特版
常春藤俱乐部
器材购买及维修
新摄会部落
建立摄影思维
乌鲁木齐版
港澳台及海外站
主题摄影交流区
右视觉摄影
唯美影像论坛
西南人文摄影俱乐部
新朋老友社区
品牌交流区
3D立体摄影
论坛管理区
商家服务区
地方论坛交流区
自建论坛区
既往论坛回顾
0是否确认删除本帖?
好友列表 (2548)
0是否确认删除此好友?
0查看更多消息详细写一个功能完善的PhotoBrowser(二)加载多张图片以及加载网络图片 - 简书
详细写一个功能完善的PhotoBrowser(二)加载多张图片以及加载网络图片
写一个功能完善的图片浏览器
本地图片.gif
本篇文章后完成的效果
本篇效果.gif
前言: 在之前我们已经实现了对单张图片的手势处理缩放,如果顺利的话 , 我们的photoView目前对于单张图片的功能支持已经很好了, 接下来我们来实现对多张图片的浏览, 实现真正意义上的图片浏览器, 同时会用到kingfisher(实现了和SDWebImage相似的功能的一个加载图片的swift框架 -- 王巍写)来加载网络图片
1.实现多张图片的滚动浏览, 相信大家都会有思路怎么实现的, 因为就是相当于一个图片轮播器 , 而且还不需要自动滚动, 甚至不需要实现循环滚动, 那么应该是很简单就能实现的
使用UIScrollView来实现图片的滚动, 那么在这个过程中就需要注意到循环利用ImageView的处理,否则会浪费很多的内存容易造成内存爆满, 你可以使用两个或者三个ImageView来实现, 具体的思路分析和实现可以参考, 或者参考MJPhotoBroswer自己来管理一个ImageView的重用机制
从上面使用UIScrollView的分析中感觉到,要手动来实现重用还是需要做不少的工作, 这里笔者希望比较简单高效的实现PhotoBroswer, 所以选择了使用UICollectionView来实现, 因为它自带有重用机制, 我们可以直接拿来使用, 如果不是很熟悉collectionView的使用,也不用太担心, 本次不会用到它的很多高级的功能, 不过后面会提到一点collectionView的分页使用技巧
实现网络图片的加载
其实要很简单加载服务器的图片, 使用apple提供给我们的一些API就可以很简单把图片"加载"处理, 不过需要注意的是我们提到的只是能够"加载"出来, 但是其中还有很多的细节需要处理, 比如,
a.你应该考虑异步加载图片不要阻塞主线程, 那么当有多张图片的时候,你需要处理多个线程的开销和效率.
b. 对于加载完成的图片你应该考虑缓存, 以便于之后能很快加载, 那么缓存你需要处理"内存缓存"(临时缓存到内存,加载速度很快, 但是缓存多张图片到内存的时候会消耗大量的内存, 所以需要管理缓存到内存的文件大小, 及时清空缓存)和"磁盘缓存"(持久化保存在沙盒)
相信仅仅是上面提到两点, 一定会让大多数的读者感觉到很难实现(是的, 鉴于笔者也感觉到自己实现这个网络图片的加载的困难和自己的能力有限),所以我们应该考虑其他的方便的方法来实现, 当然上面给出了自己实现的思路, 有能力的朋友不妨自己去实现一下
既然自己实现很麻烦, 就找第三方来帮忙了, 这里使用到了"王巍"写的"kingfisher", 这个纯swift的图片加载库提供了和SDWebImage相类似的接口使用很是方便, 同时很惊讶的是这个框架较好的实现了GIF图片的加载(关于GIF图片的加载后面可能会提到怎么去实现)
注意, 在使用kingfisher加载多张网络图片的时候, 你可能会注意到, xcode上面显示的内存消耗是很大的, 在实现PhotoBrowser的时候, 我使用SDWebImage和Kingfisher加载了相同的图片, 发现在xcode上面显示的内存消耗两者确实是相差很大的, 你会明显的发现kingfisher消耗了比SDWebImage多很多的内存, 所以笔者当时去打扰了一下王巍, 他说到这两个框架的实现思路是相似的, 内存消耗上不应该有很大的区别, 可能是xcode自身显示的bug, 后来我用真机测试多张图片确实是没有收到内存警告, 所以大家可以放心的使用
思路写的比较啰嗦, 下面进入实现部分
1). 自定义UICollectionViewCell用于展示每一张图片
新建文件PhotoViewCell, 这里直接把之前的PhotoView的代码拿过来稍作改变就可以利用之前里写的对单张图片的处理, 因为只是换了一个容器而已
新建文件PhotoModel来作为图片模型, 因为每一个cell显示一张图片, 所以它拥有这张图片的photoModel
photoModel.png
这里在设置了photoModel的时候, 我么利用属性观察器来设置image
private func setupImage() {
// 首先判断是否正确设置了photoModel
guard let photo = photoModel else {
assert(false, "设置的图片模型不正确")
// 如果是加载本地的图片, 直接设置图片即可, 注意这里是photoBrowser需要提升的地方
// 因为对于本地图片的加载没有做处理, 所以当直接使用 UIImage(named"")的形式加载图片的时候, 会消耗大量的内存
// 不过鉴于参考了其他的图片浏览器框架, 大家对本地图片都没有处理, 因为这个确实用的很少, 毕竟都是用来加载网络图片的情况比较多
// 如果发现确实需要处理后面会努力处理这个问题
if photo.localImage != nil {
// 注意这个image的属性观察器中, 我处理了imageView的frame
image = photo.localImage
// 加载完成后直接返回
// 加载网路图片, 首先判断url是否合法
guard let urlString = photo.imageUrlString, let url = NSURL(string: urlString) else {
assert(false, "设置的url不合法")
// 设置默认图片
if let sourceImageView = photo.sourceImageView {
image = sourceImageView.image
// 如果没有提供默认的图片, 就设置一张默认的图片
image ?? UIImage(named: "2")
// 这里使用kingfisher来加载网络图片 很简单的调用
imageView.kf_setImageWithURL(url, placeholderImage: image, optionsInfo: nil, progressBlock: {[weak self] (receivedSize, totalSize) in
let progress = Double(receivedSize) / Double(totalSize)
print(progress)
// 这里面能够获取到加载进度, 便于提供进度条显示
}) {[weak self] (image, error, cacheType, imageURL) in
// 加载完成
// 注意: 因为这个闭包是多线程调用的 所以可能存在 没有显示完图片,就点击了返回
// 这个时候self已经被销毁了 所以使用[unonwed self] 将会导致"野指针"的问题
// 使用 [weak self] 保证安全访问self
// 但是这也不是绝对安全的, 比如在 self 销毁之前, 进入了这个闭包 那么strongSelf 有值 进入
// 如果在这时恰好 self 销毁了,那么之后调用strongSelf 都将会出错crash
// 可以考虑使用withExtendedLifetime
withExtendedLifetime(self, { () -& self in
if let strongSelf = self
// 加载完成, 设置图片, 触发里面的属性观察器设置imageView
strongSelf.image = image
if let _ = image { return }
// 提示加载错误
新建文件PhotoBroswer来处理多张图片的显示
设置collection view
private lazy var collectionView: UICollectionView = {[unowned self] in
let flowLayout = UICollectionViewFlowLayout()
flowLayout.scrollDirection = .Horizontal
// 每个cell的尺寸
-- 宽度设置为UICollectionView.bounds.size.width ---& 滚一页就是一个完整的cell
flowLayout.itemSize = CGSize(width: self.zj_width + PhotoBrowser.contentMargin, height: self.zj_height)
flowLayout.minimumLineSpacing = 0.0
flowLayout.minimumInteritemSpacing = 0.0
flowLayout.sectionInset = UIEdgeInsetsZero
// 分页每次滚动 UICollectionView.bounds.size.width
let collectionView = UICollectionView(frame: CGRect(x: 0.0, y: 0.0, width: self.zj_width + PhotoBrowser.contentMargin, height: self.zj_height), collectionViewLayout: flowLayout)
collectionView.delegate = self
collectionView.dataSource = self
collectionView.pagingEnabled = true
collectionView.registerClass(PhotoViewCell.self, forCellWithReuseIdentifier: PhotoBrowser.cellID)
self.insertSubview(collectionView, atIndex: 0)
return collectionView
处理collection view的代理和datasource方法, 这里面比较容易理解
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -& Int {
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -& Int {
return photoModels.count
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -& UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(PhotoBrowser.cellID, forIndexPath: indexPath) as! PhotoViewCell
// 避免出现重用出错的问题, 大家可以试下注释这行会带来什么不想要的效果, 然后应该就理解了这个方法为何存在
cell.resetUI()
let currentModel = photoModels[indexPath.row]
// 注意之前直接传了self的一个函数给singleTapAction 造成了循环引用
cell.singleTapAction = {[unowned self](ges: UITapGestureRecognizer) in
self.dismiss()
return cell
// 这里监控collectionView的滚动, 是希望在滚动超过一半的时候改更改图片的索引, 这个会在之后的toolBar上使用到, 来显示索引
func scrollViewDidScroll(scrollView: UIScrollView) {
// 向下取整
currentIndex = Int(scrollView.contentOffset.x / scrollView.zj_width + 0.5)
前面提到的处理collection view的分页的一点小技巧
如果你只是简单设置了collectionView.pagingEnabled = true,设置
flowLayout.itemSize = CGSize(width: self.zj_width , height: self.zj_height), 并且设置cell里面的scrollView和contentView的尺寸相同, 那么滚动的效果是这样的
没有间隙.png
我们希望两张图片之间有一定的间隙, 那么很直接, 直接将cell里的scrollView的宽度减少一点应该就可以了
/// 懒加载
lazy var scrollView: UIScrollView = {
let scrollView = UIScrollView(frame: CGRect(x: 0.0, y: 0.0, width: self.contentView.zj_width - PhotoBrowser.contentMargin, height: self.contentView.zj_height))
这样图片之间的间隙自然是出来的, 但是发现滚动完成后后面的图片显示不正常. 因为collectionView每次滚动一页的宽度是UICollectionView.bounds.size.width, 所以和cell的尺寸没有关系, 那么我们再处理一下
分页分析.png
// 每个cell的尺寸
-- 宽度设置为UICollectionView.bounds.size.width ---& 滚一页就是一个完整的cell
flowLayout.itemSize = CGSize(width: self.zj_width + PhotoBrowser.contentMargin, height: self.zj_height)
/// cell中scrollView的尺寸
let scrollView = UIScrollView(frame: CGRect(x: 0.0, y: 0.0, width: self.contentView.zj_width - PhotoBrowser.contentMargin, height: self.contentView.zj_height))
// 分页每次滚动 UICollectionView.bounds.size.width
let collectionView = UICollectionView(frame: CGRect(x: 0.0, y: 0.0, width: self.zj_width + PhotoBrowser.contentMargin, height: self.zj_height), collectionViewLayout: flowLayout)
到目前为止, 多张图片的显示以及网络图片的加载处理基本就完整了,一个比较成型的PhotoBrowser就完成了, 至于里面的toolBar和提示框, 还有过渡动画可能会在以后写写,欢迎关注
详细请移步,里面都有详细的Demo使用示例 如果您觉得有帮助,不妨给个star鼓励一下, 欢迎关注
闲暇之余分享一些实用的iOS技术,欢迎关注
https://github.com/jasnig
http://www.jianshu.com/p/aebd
电子科技大学在校生, 正在腾讯实习中
好久没写技术博客了,最近遇到一个需求瀑布流方式实现商品详情展示,并且图片尺寸各种各样都有,且后端不返回图片尺寸,这种条件下实现瀑布流还是相当困难的,在网上找了很多博客都没有达到想要的效果,所以有必要记录一下。大家都知道瀑布流实现的核心就是图片尺寸。如果是本地图片很容易计算得...
用到的组件1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SDWebImage多个缩略图缓存组件 UICKeyChainStore存放用户账号密码组件 Reachability监测网络状态 DateTools友好...
因为要结局swift3.0中引用snapKit的问题,看到一篇介绍Xcode8,swift3变化的文章,觉得很详细,转载如下:
00:29 Swift 2 and 3过去每一版的Xcode 都和固定版本的Swift编程语言绑定在一起, Xcode 8中...
前言 iOS里的UI控件其实没有几个,界面基本就是围绕那么几个控件灵活展开,最难的应属UICollectionView了,因为它的可定制化程度最高,最灵活,值得我们去研究一番 目录 ** UICollectionView的基本使用** ** 自定义布局整体思路** 实现瀑布...
AFNetworking网络请求组件SDWebImage多个缩略图缓存组件FMDB本地数据库组件UICKeyChainStore存放用户账号密码组件Reachability监测网络状态DateTools友好化时间MBProgressHUD一款提示框第三方库MWPhotoBr...
昨天晚上突如其来的生病,突然感到自己好脆弱,在那种特别疼痛的状态下,心里打翻了五味瓶,不是滋味,去急诊的路上 心里带来的疼痛,好像比身体的疼痛还要难受,只有自己懂那种的滋味,无法用语言诉说,已经不小的年龄,自己都不知道好好照顾自己,曾经觉的自己能负责起自己的一切,但是就在昨...
本人党辉,生于1974年,父亲是一名军转干部从小就继承了不屈不挠不服输的军人精神。在不断打拼的道路上一直激励着我。 创业的路没有一帆风顺,千辛万苦都曾经历。开过餐馆,贩过煤炭…经过一次次的失败一次次的努力终于在2009年怀着对家乡的深厚感情,开启了我回村创立家庭农场的新理念...
便签 漫天飞舞的风沙 抬头可见的牛羊 我要来看 这美丽的家乡 别离了,亲爱的朋友 在哪牛羊成群的地方 在哪峻山坏绕的地方
这也是多年前的事情了,我每次想起来都莫名的伤感。 当时工作在上海,压力不大,薪水不高,工作轻松。上海当时ADSL刚刚开始普及,我所在的公司就拉了一根ADSL网线,让我可以很开心的上网。 水源上我97年的时候就注册了,还沉迷过一段时间的水源聊天室,当年的聊天室极端热闹,一个晚...
某日上街,去商城购物。行走间,遇一发单员,递张传单予我,说健身会馆新开张不久,有优惠。所需物品购毕,看看单子,文案很是动人。按着地址,至购物中心六楼,穿过几道门,拐过几道弯,才算找到会馆门厅。前台小姐很热情接待了我,询问了几句,便指派一会籍顾问带进会馆,跟随进去里面别有洞天...刘长喜真假 刘长喜:直面网络传播中的政策失真 - 夜灯网 刘长喜真假 刘长喜:直面网络传播中的政策失真热点&&&&&&& 在自媒体时代,政府不能只会埋头苦干,做好政策传播同样重要。面对政策在网络传播中的失真,不仅需要政府加强对媒体、网民发言平台的整顿管理,更需要涉事部门在网络上直接发声,明确清晰地将政策传达到舆论场中。笔者认为,政策内容在网络传播中的失真是造成网民负面情绪的主因。日,国务院发布《关于激发重点群体活力带动城乡居民增收的实施意见》,提出“适当加大对高收入者的税收调节力度”。部分媒体在报道中将其与“年所得12万元以上”这一纳税自行申报标准简单叠加,造成认识上的混乱。出现政策失真的因素是多方面的。一般来说,与社会热点相关的政策更易引发民众关注,也更易引发对政策的曲解。特别是一些网站把关不严,甚至为了吸引民众眼球,未经充分考证调查就发布不实消息。财税政策由于其专业性,如果没有专业人士的及时参与,普通民众较难辨别消息真假。如何纠正财税政策在传播中失真的问题?作为财税政策颁布的源头,财税部门如果能够合理利用多种形式的发声平台,积极联系各大新闻媒体传播真相,就能够产生内部引力,将失真的政策传播拉回事实正轨。例如,发生“年所得12万元以上为高收入”的误读后,上海税务官微在微博中明确表达了个人所得税、房产税的计算办法和减免政策等多项内容,专业性与权威性都很强,被媒体大量引用转发,从源头上避免了政策谣言与政策曲解的发生。官方平台首发会减少政策传播失真。首发于官方发声平台的财税政策如果能辅以翔实的介绍、解释,再经由主流门户网站向外扩散,就能减少传播失真,从而避免被各类门户网站任意解读现象,使政府部门掌握舆论的主动权。官方发声纠正问题会正确引导舆论。当政策在网络传播中发生失真现象的时候,官方对不实信息的纠正是引导舆论的重要手段。2016年出现“是否将开征遗产税”的议论后,广州日报记者致电深圳市委宣传部询问,深圳市国税局给予否定答复。上海开放大学信息安全与社会管理创新实验室数据采集系统采集数据显示,官方发声后,舆论导向明显偏向正面。面对政策传播失真问题,政府部门、媒体与网民均应作出观念和行动上的改变。政府部门要善于发声。在自媒体时代,政府部门不能只会埋头苦干,要认识到,做好政策传播同样重要。管理部门应加强对媒体、网民发言平台的整顿,涉事部门要在网络上直接发声,明确清晰地将政策传达到舆论场中。现在,一些税务机关虽然建立了官方网站、微博等,但是发声质量不高,关注者寥寥,没有起到很好的传播政策的作用。需要强调的是,引发网络热议的往往是与群众利益密切相关的财税政策。政府部门对舆论热点的把握有助其发现政策的不足,进一步加以完善;而对政策的宣传与解释也可以让财税政策获得更多民众支持,便利相关政策的推行。媒体要传播真相。近些年来,“无反转、不新闻”已经成为一些媒体报道的常态。也许为了追求报道的及时性,唯恐居于人后;也许为了吸引公众眼球,生怕无人问津,一些新闻网站在网络传播中并没有真正做到新闻从业者对公信力的坚守。一些媒体“先传谣、后辟谣”,也许能够短时间内提升网站流量、增加网站收入,但结果必然是公德心受质疑、公信力受损害。在报道、转发有社会影响力的消息之前,媒体从业者最首要的应该是核实报道是否符合事实,是否反映国家的利益、人民的呼声。网民爱宣泄但更应爱真理。要减少对政策的误读,避免被媒体中的“标题党”误导,网民需要不断学习。以财税为例,与发达国家相比,我国民众的纳税人意识还较为薄弱,对于国家财税政策的关心与了解还停留在较浅的层面。以严谨的态度,学习、讨论财税政策,应是一个纳税人应尽的义务。(作者单位:上海财经大学公共政策与治理研究院) 继续阅读上一篇 &:侯继林电影 孙松侯继林 侯继林电视剧下一篇 &:何海生作品 何海生带队参加“广元造”品牌商品展览会<< 上一篇文章&&&下一篇文章 >> 相关文章天才创业者茅侃侃自杀身亡,揭露了创业中最大的忌讳《天使之路》袁博超世界排名 袁博超个人资料三围起底爷爷超市扇女童 现场画面曝光女童鼻血直流合理分配基金理财产品 让投资者坐享牛市收益注意新的盘口骗局:“高位盘整放巨量突破”,后市必开始下跌行情向往的生活第五期何炅黄磊为何争吵 向往的生活第五期海清如何化解争吵河北投入1520万公益金助学 全省累投8800多万和《遇见王沥川》比,《遇见爱情的利先生》可以打零分!梦见自己打碎玻璃预示着自己会有出色的成就董卿素颜参加飞天奖彩排照曝光,网友:不化妆的董卿更美1因素助恒大目标赴中超 另1支中超球队加入争夺2017北影节公布天坛奖入围片单介绍深大今年本科招生7400人 优秀新生最高资助10万美元辣眼睛!葛荟婕终于不再蹭汪峰的热度,这次T台造型轻松上了头条专家:全球生蚝养殖80%在中国,没必要进口丹麦的林巧稚的资料 网友:从林巧稚的信仰转变看周恩来崇高的人格力量邓超刘诗诗时隔多年再合作 缉凶者已经低调开机拍摄奔跑吧百米冲刺连续录制3小时 全员为何录制结束还不停?曾仕强:背熟这5个词,你就能顺利把自己孩子教育好殷铁生现状 殷铁生:40天无法改变现状 着眼未来培养年轻前锋JAVA图片上传,缩图后解决失真的效果
解决失真效果
tag.getGraphics().drawImage(src.getScaledInstance(440, (int)
AutoHeight,& Image.SCALE_SMOOTH), 0,
在任何一个综合性网站,我们往往需要上传一些图片资料。但随着高分辨率DC的普及,上传的图片容量会很大,比如300万象素DC出来的文件基本不下600K。为了管理方便,大家可能不愿意每次都用ACDsee修改它,而直接上传到服务器。但是这种做法在客户端看来就没有那么轻松了,对于拨号上网的用户简直是一场恶梦,虽然你可以在图片区域设置wide和high!
  问题的解决之道来了!我们可以在类中处理一张大图,并缩小它。
  前提是需要JDK1.4,这样才能进行处理。按以下方法做:
  import java.io.F
  import java.io.FileOutputS
  import java.awt.G
  import java.awt.I
  import java.awt.image.BufferedI
  import com.sun.image.codec.jpeg.JPEGC
  import com.sun.image.codec.jpeg.JPEGImageE
  public class JpgTest {
  public void JpgTset() throws Exception{
  File _file = new File("/Order005-0001.jpg"); //读入文件
  Image src = javax.imageio.ImageIO.read(_file); //构造Image对象
  int wideth=src.getWidth(null); //得到源图宽
  int height=src.getHeight(null); //得到源图长
  BufferedImage tag = new
BufferedImage(wideth/2,height/2,BufferedImage.TYPE_INT_RGB);
  tag.getGraphics().drawImage(src,0,0,wideth/2,height/2,null);
//绘制缩小后的图
  FileOutputStream out=new FileOutputStream("newfile.jpg");
//输出到文件流
  JPEGImageEncoder encoder =
JPEGCodec.createJPEGEncoder(out);
  encoder.encode(tag); //近JPEG编码
  //System.out.print(width+"*"+height);
  out.close();
  过程很简单,从本地磁盘读取文件Order005-0001.jpg(),变成Image对象src,接着构造目标文件tag,设置tag的长宽为源图的一半,对tag进行编码,输出到文件流out,最后关闭文件流。
  还有一些问题需要说明:
  第一,目前只能支持JPG(JPEG)、GIF、PNG三种格式。
  第二,对于源图的容量有限制,最好不要超过1M,否则会抛内存不足的错误,不过我试验过1.8M的源图,可以成功,但是也很容易抛内存不足。
  引用一位前辈的话:图象运算本身是密集型运算,需要大量的内存存放象素值。我用VC试了一下,4M的图象也有问题,而且越是压缩比大的图片在内存中还原成BITMAP时需要的内存越大。解决的方法,可以重写编码类,先开一定的内存,然后一段一段编码写到临时文件中,输出的时候再一段一段读出来。或利用nio的内存映象来操作。JavaMail由于采用了Builder模式,先生成一个邮件的每一个部分,然后合并成一个完整的邮件对象,这样每个构件都要先生成到内存中,你如果发送一个上百兆的附件,那么在构造Part时肯定内存溢出,所以我就改写了BodyPart的构造,让他和一个临时文件关联,然后用临时文件保存Part而不是构造在内存中,这样任义大小的附件(硬盘能放得下为限)都可以发送了。
  最后,如果大家对图像处理有更高的要求,不妨关注一下开源项目。比如JMagick,可以使用JMagick来实现图片的复制、信息获取、斜角、特效、组合、改变大小、加边框、旋转、切片、改变格式、去色等等功能。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 图片放大不失真软件 的文章

 

随机推荐