高分求助 在线等!!jp2格式图片展示问题

qq_16373603 2017-08-30 02:30:49
asp.net,展示jp2图片,200M<图片<400M,可以在网页端直接分块输出也可以把这个大图裁剪成title(256*256瓦片)存放在服务器硬盘,我试过Response.BinaryWrite在网页端输出,结果失败(显示乱码,指定Response.ContentType = "image/jp2"同样乱码),也试过裁剪,这种方法需要把图像转为bitmap,结果报错(参数无效),实在没招了。还请大神们搭救,如需要图片文件测试请留下邮箱,解决后必有重谢!
...全文
560 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
clever101 2018-05-10
  • 打赏
  • 举报
回复
使用gdal库读取jp2数据,然后C#来调用。
qq_16373603 2017-09-01
  • 打赏
  • 举报
回复
引用 7 楼 homesos 的回复:
你自己处理的话,得先了解JP2的协议、格式。 也有现成的工具,像JPEG ToolBox,可以找找其他的,看能不能集成进来用。
好,我先试试,感谢!
qq_16373603 2017-09-01
  • 打赏
  • 举报
回复
引用 2 楼 homesos 的回复:
要预处理吧,先转成JPG,再裁剪,显示就没什么问题了。
嗯,先谢谢哈 我用filestream和ps cs6都试过转成JPG,都失败了,不知道还有什么其他方法了
qq_16373603 2017-09-01
  • 打赏
  • 举报
回复
百度云盘:http://pan.baidu.com/s/1nvr7NUL,密码:10bj,这是需要处理的jp2图片附件,图片200M
homesos 2017-09-01
  • 打赏
  • 举报
回复
你自己处理的话,得先了解JP2的协议、格式。 也有现成的工具,像JPEG ToolBox,可以找找其他的,看能不能集成进来用。
qq_16373603 2017-09-01
  • 打赏
  • 举报
回复
继续等待各大神指教!!!
qq_16373603 2017-09-01
  • 打赏
  • 举报
回复
引用 3 楼 qq_38048915 的回复:
[quote=引用 1 楼 foren_whb 的回复:] jp2格式目前普及率不高,很多浏览器不能解析,这很正常 我不理解的是,你们为什么要坚持使用jp2图片做展示? 既然只是在网页上展示,为何不把图片先转成jpg? 既然考虑到加载效率问题,为何不事先瓦片化?
他可能问的就是怎么实现后台上传图片然后自动转换格式和瓦片化存储吧[/quote] 1、不是很想通过后台来上传这些图片,每张图片都查不到200多M,直接通过FTP上传,哈哈 2、我尝试过用控制台程序把图片瓦片化,把jp2转化为bitmap对象,然后根据横纵坐标来切片(256*256),当他图片转为bitmap对象时就报参数无效,不知道还有没有其他形式实现瓦片化 3、我也尝试过通过FileStream类把jp2图片转为jpg格式,结果转化出来的图片不能被识别(貌似并没有真正转成Jpg),以下是我通过filestream转化的代码: //文件大小偏移 int filesizeOffset = 0x0002; //数据区偏移 int dataOffset = 8; //图像宽度偏移 int widthOffset = 0x0012; //图像高度偏移 int heightOffset = 0x0016; //位数偏移 int bitOffset = 0x001C; //是否压缩偏移 int compressOffset = 0x001E; //数据区大小偏移 int datasizeOffset = 0x0022; int width = 0; int height = 0; int fileheadsize = 0; int dataseize = 0; int offset = 0; //读取待切分文件 string file = "D:\\sample2.jp2"; //string file = "D:\\a.bmp"; FileInfo fi = new FileInfo(file); FileStream fs = fi.OpenRead(); byte[] buff = new byte[4]; //数据区偏移量 fs.Seek(dataOffset, SeekOrigin.Begin); int nBytesRead = fs.Read(buff, 0, buff.Length); fileheadsize = BitConverter.ToInt32(buff, 0); Console.WriteLine("数据区偏移:" + fileheadsize); //宽度 fs.Seek(widthOffset, SeekOrigin.Begin); fs.Read(buff, 0, buff.Length); width = BitConverter.ToInt32(buff, 0); Console.WriteLine("宽度:" + width); //高度 fs.Seek(heightOffset, SeekOrigin.Begin); fs.Read(buff, 0, buff.Length); height = BitConverter.ToInt32(buff, 0); Console.WriteLine("高度:" + height); //位数 fs.Seek(bitOffset, SeekOrigin.Begin); fs.Read(buff, 0, buff.Length); offset = BitConverter.ToInt32(buff, 0); Console.WriteLine("位数:" + offset); //是否压缩 fs.Seek(compressOffset, SeekOrigin.Begin); fs.Read(buff, 0, buff.Length); offset = BitConverter.ToInt32(buff, 0); Console.WriteLine("压缩:" + offset); //数据区大小 fs.Seek(datasizeOffset, SeekOrigin.Begin); fs.Read(buff, 0, buff.Length); dataseize = BitConverter.ToInt32(buff, 0); Console.WriteLine("数据区大小:" + dataseize); //读取图像下半部分,写入11.bmp FileStream fs1 = new FileStream("D:\\11.bmp", FileMode.OpenOrCreate); //复制文件头 fs.Seek(0, SeekOrigin.Begin); byte[] filehead = new byte[fileheadsize]; fs.Read(filehead, 0, fileheadsize); fs1.Write(filehead, 0, fileheadsize); //复制数据 byte[] data = new byte[dataseize]; fs.Seek(fileheadsize, SeekOrigin.Begin); fs.Read(data, 0, data.Length); fs1.Write(data, 0, data.Length / 5); //修改高度,因为是水平切分,所以不需修改宽度 byte[] b = new byte[4]; b = BitConverter.GetBytes(height / 2); fs1.Seek(heightOffset, SeekOrigin.Begin); fs1.Write(b, 0, buff.Length); //修改数据区大小 b = new byte[4]; b = BitConverter.GetBytes(dataseize / 2); fs1.Seek(datasizeOffset, SeekOrigin.Begin); fs1.Write(b, 0, buff.Length); //修改文件大小 b = new byte[4]; b = BitConverter.GetBytes(fs1.Length); fs1.Seek(filesizeOffset, SeekOrigin.Begin); fs1.Write(b, 0, buff.Length); //关闭对象 fs.Close(); fs1.Flush(); fs1.Close(); Console.Read(); 还请各位大神多多指教啊
qq_16373603 2017-09-01
  • 打赏
  • 举报
回复
引用 1 楼 foren_whb 的回复:
jp2格式目前普及率不高,很多浏览器不能解析,这很正常

我不理解的是,你们为什么要坚持使用jp2图片做展示?

既然只是在网页上展示,为何不把图片先转成jpg?

既然考虑到加载效率问题,为何不事先瓦片化?


解释一下哈
1、jp2图片为医疗玻片,客户其实不是很想做二次转化,就算要做二次转化也比较麻烦,我尝试用ps cs6转化为jpg,根本加载不进去,报错:,这个图片200M,如果是10几M的jp2能够转化
2、事先瓦片化如何处理?
谢谢
qq_16373603 2017-09-01
  • 打赏
  • 举报
回复
引用 12 楼 qq_16373603 的回复:
[quote=引用 11 楼 foren_whb 的回复:]
[quote=引用 6 楼 qq_16373603 的回复:]
继续等待各大神指教!!!

参考

这里提供了一个自由软件freeimage的用法,可以把jp2转成jpg,也可以通过它把jp2读取为bitmap格式,这样就方面我们进行切割或其他处理了[/quote]

这个是c++开发的吧,我先研究一下,谢谢[/quote]

我试了一下这个freeimage,3.3M的jp2可以,但200M的报错:
代码如下:
FIBITMAP dib = FreeImage.LoadEx(FileName);
//save the image out to disk
FreeImage.Save(FREE_IMAGE_FORMAT.FIF_JPEG, dib, "D:\\test.jpg", FREE_IMAGE_SAVE_FLAGS.JPEG_QUALITYNORMAL);
//or even turn it into a normal Bitmap for later use
Bitmap bit_map = FreeImage.GetBitmap(dib);
return bit_map;
qq_16373603 2017-09-01
  • 打赏
  • 举报
回复
引用 11 楼 foren_whb 的回复:
[quote=引用 6 楼 qq_16373603 的回复:] 继续等待各大神指教!!!
参考 这里提供了一个自由软件freeimage的用法,可以把jp2转成jpg,也可以通过它把jp2读取为bitmap格式,这样就方面我们进行切割或其他处理了[/quote] 这个是c++开发的吧,我先研究一下,谢谢
丰云 2017-09-01
  • 打赏
  • 举报
回复
引用 6 楼 qq_16373603 的回复:
继续等待各大神指教!!!
参考 这里提供了一个自由软件freeimage的用法,可以把jp2转成jpg,也可以通过它把jp2读取为bitmap格式,这样就方面我们进行切割或其他处理了
homesos 2017-08-31
  • 打赏
  • 举报
回复
要预处理吧,先转成JPG,再裁剪,显示就没什么问题了。
丰云 2017-08-31
  • 打赏
  • 举报
回复
jp2格式目前普及率不高,很多浏览器不能解析,这很正常 我不理解的是,你们为什么要坚持使用jp2图片做展示? 既然只是在网页上展示,为何不把图片先转成jpg? 既然考虑到加载效率问题,为何不事先瓦片化?
qq_38048915 2017-08-31
  • 打赏
  • 举报
回复
引用 1 楼 foren_whb 的回复:
jp2格式目前普及率不高,很多浏览器不能解析,这很正常 我不理解的是,你们为什么要坚持使用jp2图片做展示? 既然只是在网页上展示,为何不把图片先转成jpg? 既然考虑到加载效率问题,为何不事先瓦片化?
他可能问的就是怎么实现后台上传图片然后自动转换格式和瓦片化存储吧

62,025

社区成员

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

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

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

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