当前位置:首页>技术笔记 >前端技术 >

tif格式图片在线浏览

TIFF.js基于JavaScript的的TIFF图像格式解析器,可在浏览器中浏览TIFF图像,就好像它们是真实支持的一样!
TIF格式是一种压缩最小的图片处理格式,基本不损失图象信息,但其缺陷就是文件体积太大,浏览器不能显示TIF格式图像。
JPEG是一种压缩比比较大的图片格式,图片以JPEG格式保存以后,会损失掉不少图片信息,但其好处就是图片体积小,放在电脑里,可以占用较小的空间,在网上传播,速度比较快,所以,JPEG和GIF又称为WEB格式。
下面提供一种可以在线浏览TIF格式图片的方法。
TIFF.js基于JavaScript的的TIFF图像格式解析器,可在浏览器中内嵌TIFF图像,就好像它们是真实支持的一样!
通过使用Emscripten编译LibTIFF C代码,tiff.js是LibTIFF的一个端口。
https://github.com/seikichi/tiff.js/tree/master
扩展程序通过拦截浏览器加载以.tiff结尾并处理该请求的URL的任何尝试来工作。处理包括使用Javascript,LLVM / Emscripten,libtiff端口将TIFF图像渲染到内存画布中。画布有一种方法,用于将其内容作为data:imageURL获取,然后替换img标签中的src属性。
1、阻止原始请求
2、使用XHR从请求的URL加载图像数据
3、将接收的图像数据渲染到画布中
4、data:image从canvas 获取URI替换img标签中的src属性

结果是TIFF图像出现在页面上,就像浏览器本身支持TIFF图像一样。但是,由于我们必须单独下载和解码图像,因此会有一个小延迟。但它足够小,除非你寻找它,否则你不会注意到它。

tif格式图片在线浏览demo 

tif格式图片和pikachoose结合的在线浏览

<!DOCTYPE html>
<html lang="zh-cn">
<head>
	<meta charset="UTF-8" />
	<meta name="viewport" content="width=device-width, minimum-scale=0.1">
	<title>TIFF test</title>
	<script src="//code.jquery.com/jquery-1.10.1.min.js"></script>
	<script src="tiff.js" type="text/javascript"></script>
</head>
<body style=" background: #0e0e0e;">
<div class="tif-data" style="width:80%;height:100%;margin: 0px auto;">
<img style="width:100%" data-src="http://oa.ieage.cn/tiff/000001.tif"/>
<img style="width:100%" data-src="http://oa.ieage.cn/tiff/000002.tif"/>
<img style="width:100%" data-src="http://oa.ieage.cn/tiff/000003.tif"/>
<img style="width:100%" data-src="http://oa.ieage.cn/tiff/000004.tif"/>
<img style="width:100%" data-src="http://oa.ieage.cn/tiff/000005.tif"/>
</div>
<script type="text/javascript">
    var memory='32M';
    if (memory) {
        Tiff.initialize({ TOTAL_MEMORY: memory });
    }
    function convert_binary_string_to_buffer( data ){
        var buffer, view, a_byte;

        buffer = new ArrayBuffer( data.length );
        view = new DataView( buffer );

        data.split( '' ).forEach( function( c, i ){
            a_byte = c.charCodeAt();
            view.setUint8( i, a_byte & 0xff );
        });

        return view.buffer;
    }

    function create_request_for_url( url ){
        var request;
        console.log( 'Starting XHR request for', url );
        request = new XMLHttpRequest();
        request.open( 'GET', url, false );
        request.overrideMimeType( 'text/plain; charset=x-user-defined' );
        request.send( );
        console.log( 'Finished XHR request' );

        return request;
    }

    function get_buffer_from_url( url ){
        var request;

        request = create_request_for_url( url );

        if( request.status != 200 ){
            console.log( 'Exception', 'request for image failed', request );
            return url;
        }

        return convert_binary_string_to_buffer( request.responseText );
    }

    convert_buffer_to_dataurl = function( buffer ){
        var tiff;

        try {
            console.log( 'Opening tiff' );
            tiff = new Tiff({ buffer: buffer });
            console.log( 'Opened', 'width: ', tiff.width(), 'height: ', tiff.height(), tiff );
        } catch( e ){
            console.log( 'Exception', e );
            return;
        }

        return tiff.toDataURL();
    };

    function redirect_request_to_dataurl( details ){
        var url, buffer, dataURI;

        console.log( 'Entering', details );
        url = details.url;
        console.log( 'Loading', details.url );
        buffer = get_buffer_from_url( url );
        console.log( 'Loaded', buffer.byteLength, 'bytes of data' );
        dataURI = convert_buffer_to_dataurl( buffer );
        console.log( 'Converted', dataURI );
        return dataURI;
    }

    $(function () {
        var img = $('.tif-data img');
        for(i=0;i<img.length;i++){
            var url = $('.tif-data img:eq('+i+')').attr('data-src');
            console.info(url);
            var new_url = redirect_request_to_dataurl({url: url});
            $('.tif-data img:eq('+i+')').attr('src', new_url);
        };

    })
</script>
</body>
</html>

 

上一篇: CSS设置背景图宽度100%,高度等比例缩放

下一篇: imgcook 设计稿一键智能生成代码,前端人员紧张了