图片转码方法、装置、设备及存储介质与流程

文档序号:23859306发布日期:2021-02-05 15:56阅读:134来源:国知局
[0001]本发明实施例涉及计算机
技术领域
:,尤其涉及图片转码方法、装置、设备及存储介质。
背景技术
::[0002]随着终端技术和互联网的普及和发展,人们经常通过互联网分享图片或照片。基于提高图片的编码效率、减少图片占用的存储空间或传输带宽等原因,终端中出现了一些新的图片编码格式来取代传统的格式,可将这些图片编码格式统称为现代图片编码格式。以目前两大手机操作系统厂商苹果(apple)和谷歌(google)为例,开始采用更为现代的高效率图片文件格式(highefficiencyimagefileformat,heif)和webp图片编码格式取代原有数字照片的联合图片专家组(jointphotographicexpertsgroup,jpeg)和便携式网络图形(portablenetworkgraphics,png)等传统图片格式。新的图片编码格式的优势一般包括具有更优的图片数据压缩算法,编码效率高,文件体积小,压缩率大,在相同精细度的前提下,图片的体积往往只是原有编码格式的50%,大幅减少图片占用的存储空间。[0003]然而,目前的浏览器对新的图片编码格式支持较差,以上文的heif和webp为例,webp仅在googlechrome浏览器中得到支持,heif目前更是没有浏览器能支持其显示。如果网页中包含由终端用户上传的heif或webp格式的图片,对于使用浏览器访问网站的用户,可能无法浏览观看,影响用户体验。针对这一问题,现有的解决方案是在上传时由服务端对现代图片编码格式的图片进行二次转码,转换成浏览器客户端能够支持的格式进行编码保存。现有方案的缺点是往往需要保存转码前和转码后两份图片,浪费存储空间,而且无法有效利用现代图片编码格式的体积小及编码效率高等特性来节省传输时的网络流量。同时,服务端对图片转码也需要消耗较多的服务器处理器运算资源,对服务器的性能要求较高,导致提高了企业提供服务时的机器成本。因此,现有的图片转码方案仍不够完善,需要改进。技术实现要素:[0004]本发明实施例提供了图片转码方法、装置、设备及存储介质,可以优化现有的图片转码方案。[0005]第一方面,本发明实施例提供了一种图片转码方法,应用于浏览器客户端,所述方法包括:[0006]从服务端获取第一格式的第一图片;[0007]通过运行基于预设编程语言编写的预设字节码,将所述第一图片转码成第二格式的第二图片,供所述浏览器客户端进行显示,其中,所述第二格式与所述第一格式不同,所述第二图片和所述第一图片的图片内容一致,基于所述预设编程语言编写的字节码能够在浏览器内运行。[0008]第二方面,本发明实施例提供了一种图片转码装置,集成于浏览器客户端,所述装置包括:[0009]图片获取模块,用于从服务端获取第一格式的第一图片;[0010]图片转码模块,用于通过运行基于预设编程语言编写的预设字节码,将所述第一图片转码成第二格式的第二图片,供所述浏览器客户端进行显示,其中,所述第二格式与所述第一格式不同,所述第二图片和所述第一图片的图片内容一致,基于所述预设编程语言编写的字节码能够在浏览器内运行。[0011]第三方面,本发明实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本发明实施例提供的图片转码方法。[0012]第四方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例提供的图片转码方法。[0013]本发明实施例中提供的图片转码方案,应用于浏览器客户端,从服务端获取第一格式的第一图片,通过运行基于预设编程语言编写的预设字节码,将第一图片转码成第二格式的第二图片,供浏览器客户端进行显示,其中,第二格式与第一格式不同,第二图片和第一图片的图片内容一致,基于预设编程语言编写的字节码能够在浏览器内运行。通过采用上述技术方案,在存在图片格式转换需求时,不需要在服务端对图片进行二次转码,可以在浏览器客户端内部进行图片格式的转换,从而避免消耗服务器运算资源,也不需要在服务器存储转码前和转码后的两份图片,节省服务器存储空间。附图说明[0014]图1为本发明实施例提供的一种图片转码方法的流程示意图;[0015]图2为本发明实施例提供的又一种图片转码方法的流程示意图;[0016]图3为本发明实施例提供的一种图片转码装置的结构框图;[0017]图4为本发明实施例提供的一种计算机设备的结构框图。具体实施方式[0018]下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。此外,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。[0019]图1为本发明实施例提供的一种图片转码方法的流程示意图,该方法应用于浏览器客户端,可以由图片转码装置执行,其中该装置可由软件和/或硬件实现,一般可集成在计算机设备中。其中,计算机设备可以是手机或平板电脑等移动终端设备,也可以是台式机等固定终端设备,具体不做限定;浏览器客户端可以包括终端中安装的浏览器应用程序,也可以包括其他应用程序中具备的能够访问网页的功能模块,具体不做限定,下面以浏览器应用程序(简称浏览器)为例进行说明。本发明实施例所适用的具体应用场景不做限定,例如,可以是普通用户通过浏览器访问网页的场景;又如,在后台页面中,常常需要查看用户上传的图片,并对图片进行审核处理,因此,也可以是适用于技术人员通过浏览器打开后台页面对图片进行审核的场景。[0020]如图1所示,该方法包括:[0021]步骤101、从服务端获取第一格式的第一图片。[0022]示例性的,用户在使用终端中的浏览器访问网页时,浏览器可以向对应的服务端发送显示请求,若网页中包含图片,则请求显示图片。服务端在接收到浏览器的图片显示请求后,会向浏览器返回图片数据,则浏览器能够获取到浏览器发送的图片数据。假设当前网页中包含第一格式的第一图片,则浏览器能够获取到第一图片对应的图片数据,一般的,该图片数据可以是二进制流数据。[0023]需要说明的是,同一网页中可能存在多个图片,多个图片可能是不同格式的图片,第一图片可以是其中任意一个图片,具体不做限定。服务端可能同时返回多个图片的图片数据,针对多个图片的图片数据,可以将多个图片均视为第一图片,进行串行转码操作或并行转码操作,具体不做限定。[0024]本发明实施例中,对第一格式的具体类型不做具体限定,可以是任意一种图片格式。在存在图片转换需求时,一般是当前获取到的图片的格式是浏览器原本并不能够显示的格式,因此,第一格式可以是浏览器不支持显示的图片格式。当然,不排除有其他一些原因导致存在图片转换需求,这时,第一格式不限于浏览器不支持显示的图片格式。以第一格式为浏览器不支持显示的图片格式为例,目前,对于大多数浏览器来说,基本都不支持现代图片编码格式的显示,因此,第一格式可以是现代图片编码格式。基于提高图片的编码效率、减少图片占用的存储空间或传输带宽等原因,终端中出现了一些新的图片编码格式来取代传统的格式,可将这些图片编码格式统称为现代图片编码格式。示例性的,所述第一格式可包括heif、webp或个人电脑交换格式(personalcomputerexchange,pcx)等等。[0025]步骤102、通过运行基于预设编程语言编写的预设字节码,将所述第一图片转码成第二格式的第二图片,供所述浏览器客户端进行显示,其中,所述第二格式与所述第一格式不同,所述第二图片和所述第一图片的图片内容一致,基于所述预设编程语言编写的字节码能够在浏览器内运行。[0026]示例性的,预设编程语言可包括允许开发者运用高级编程语言编译,再通过虚拟机在浏览器运行的编程语言。例如,预设编程语言可以是webassembly。webassembly(简称wasm)是一个实验性的低级编程语言,应用于浏览器内的客户端。webassembly将让开发者能运用自己熟悉的编程语言编译,再藉虚拟机引擎在浏览器内运行。目前,主流的浏览器均已支持webassembly技术,如谷歌浏览器(chrome)、火狐浏览器(firefox)、苹果浏览器(safari)、微软浏览器(edge)以及所有的手机浏览器等。[0027]示例性的,可以采用预设编程语言编写具备图片转码功能的字节码程序,得到本发明实施例中的预设字节码。在浏览器客户端中通过运行预设字节码,可实现将第一图片转码成第二格式的第二图片。本发明实施例对第二格式的具体类型不做限定。第二格式可包括浏览器客户端能够支持显示的格式。一般的,传统图片编码格式对于大多数浏览器客户端来说,都可以支持显示,第二格式可包括传统图片编码格式,例如jpeg、png、标签图像文件格式(tagimagefileformat,tiff)以及位图格式(bitmap,bmp)等等。[0028]本发明实施例中提供的图片转码方案,应用于浏览器客户端,从服务端获取第一格式的第一图片,通过运行基于预设编程语言编写的预设字节码,将第一图片转码成第二格式的第二图片,供浏览器客户端进行显示,其中,第二格式与第一格式不同,第二图片和第一图片的图片内容一致,基于预设编程语言编写的字节码能够在浏览器内运行。通过采用上述技术方案,在存在图片格式转换需求时,不需要在服务端对图片进行二次转码,可以在浏览器客户端内部进行图片格式的转换,从而避免消耗服务器运算资源,也不需要在服务器存储转码前和转码后的两份图片,节省服务器存储空间。[0029]在一些实施例中,所述通过运行基于预设编程语言编写的预设字节码,将所述第一图片转码成第二格式的第二图片,包括:通过运行基于预设编程语言编写的预设字节码,利用所述第一格式对应的第一基础编解码库将所述第一图片对应的第一二进制图片流转换成第一图片对象,利用所述第二格式对应的第二基础编解码库将所述第一图片对象转换成符合所述第二格式的第二二进制图片流,其中,所述第一图片对象中包含所述第一图片的属性信息和所述第一图片中各像素的像素值。这样设置的好处在于,可以快速准确地将第一格式的第一图片转换成第二格式的第二图片。[0030]示例性的,一种图片格式对应的基础编解码库可以理解为包含了定义该图片格式编解码相关规范内容的库,例如该格式下所需存储的图片信息,以及以什么样的形式存储图片信息等。基础编解码库一般为开源的,以heif为例,其对应的基础编解码库为开源的libheif;以webp为例,其对应的基础编解码库为开源的libwebp;对于一些传统图片格式来说,可以对应通用的基础编解码库,例如开源的图片处理库libvips。其中,第一图片对象具体可以是vipsimage对象,vipsimage对象可以包含图片的基本信息(也即如尺寸和分辨率等属性信息),还包含各像素的像素值,如rgb值(也即红、绿和蓝三个颜色通道的值)。利用libvips可以将vipsimage对象转换为第二格式的二进制图片流。可选的,上述第一基础编解码库和第二基础编解码库等可以预先存储于浏览器中或计算机设备中,也可以通过互联网对第一基础编解码库和第二基础编解码库进行访问,具体形式不做限定。[0031]在一些实施例中,在利用所述第二格式对应的第二基础编解码库将所述第一图片对象转换成符合所述第二格式的第二二进制图片流之后,还包括:将所述第二二进制图片流封装为二进制容器对象,并显示所述二进制容器对象,以实现所述第二图片的显示。这样设置的好处在于,可以将二进制图片流封装成浏览器支持显示的对象,确保图片的正确显示。其中,二进制容器对象可以是blob对象,blob对象可以看做是存放二进制数据的容器。[0032]在一些实施例中,所述通过运行基于预设编程语言编写的预设字节码,将所述第一图片转码成第二格式的第二图片,包括:创建后台工作线程;利用所述后台工作线程通过运行基于预设编程语言编写的预设字节码,将所述第一图片转码成第二格式的第二图片。这样设置的好处在于,通过构建后台工作线程来进行图片转换功能的预设字节码的运行,不会干扰到浏览器主线程的运行,保证浏览器的运行效率。[0033]可选的,所述后台工作线程包括webworker多线程模式下的worker线程。webworker是浏览器中提供的应用程序编程接口(applicationprogramminginterface,api),可以创造多线程环境,允许主线程创建worker线程,将一些任务分配给后者运行。在主线程运行的同时,worker线程在后台运行,两者互不干扰。worker线程在运行预设字节码完毕后,可以将运行结果返回给浏览器主线程。[0034]图2为本发明实施例提供的又一种图片转码方法的流程示意图,如图2所示,该方法可包括:[0035]步骤201、检测到用户访问网页时,向服务端请求显示图片。[0036]示例性的,检测到用户访问网页时,可以向对应的服务端发送网页显示请求,若当前页面包含图片,则服务端会向浏览器返回包含图片数据的网页内容数据。[0037]步骤202、从服务端下载第一图片,判断第一图片对应的格式是否为浏览器不支持显示的现代图片编码格式,若是,则执行步骤203;否则,执行步骤207。[0038]步骤203,读取所述第一图片的图片内容,得到对应的heif二进制图片流。[0039]本发明实施例中以heif图片为例,还可以是webp图片或其他格式的图片,若为其他格式,则可以得到对应格式的二进制图片流。例如,若为webp图片,则得到对应的webp二进制图片流。[0040]步骤204、创建webworker,并将heif二进制图片流传入worker线程。[0041]步骤205、通过worker线程运行webassembly字节码,利用libheif库将读入的heif二进制图片流转码成对应的vipsimage对象,利用libvips库将vipsimage对象转换成jpeg二进制图片流。[0042]其中,以jpeg为例进行说明,还可以替换为png等其他传统的图片格式。[0043]步骤206、通过浏览器客户端的api将jpeg二进制图片流封装成一个blob对象,执行步骤209。[0044]步骤207、读取所述第一图片的图片内容,得到对应的png二进制图片流。[0045]本发明实施例以png为例进行说明,也可以是其他的如jpeg二进制图片流。[0046]步骤208、通过浏览器客户端的api将png二进制图片流封装成一个blob对象。[0047]步骤209、对封装好的blob对象进行显示。[0048]本发明实施例提供的图片转码方法,对于浏览器客户端不支持显示的图片格式来说,如heif格式,不需要提前在服务端对heif图片进行二次转码,因此不会消耗服务端的运算资源,可以直接接收服务端发送的heif格式的图片,有效利用heif格式的体积小以及编码效率高等特点,节约服务器存储空间,在网络传输中更快,占用服务器带宽更少,在浏览器客户端内部,无需安装额外插件,利用worker线程运行具有图像格式转换功能的webassembly字节码,并利用相应的开源的基础库来进行图片格式的转换,有效利用了浏览器多线程特性,不会对浏览器主线程造成干扰,即使几十张图片同时转码也不会影响网页的正常流畅浏览,保证了优秀的用户体验,且转换之后的图片使得浏览器能够支持显示,如jpeg格式。此外,运行webassembly字节码进行转码性能快速且高效,其性能是相同实现的javascript代码的数倍以上。webassembly运行在一个内存安全的沙箱运行环境下,能有效防止黑客发送恶意图片攻击用户终端设备,保证安全性,所使用的开源库libvips,经过验证,在图片编解码过程中,占用内存更少,性能表现更出色。[0049]图3为本发明实施例提供的一种图片转码装置的结构框图,该装置可由软件和/或硬件实现,一般可集成在计算机设备中,具体可集成于计算机设备中的浏览器客户端,可通过执行图片转码方法来进行图片转码。如图3所示,该装置包括:[0050]图片获取模块301,用于从服务端获取第一格式的第一图片;[0051]图片转码模块302,用于通过运行基于预设编程语言编写的预设字节码,将所述第一图片转码成第二格式的第二图片,供所述浏览器客户端进行显示,其中,所述第二格式与所述第一格式不同,所述第二图片和所述第一图片的图片内容一致,基于所述预设编程语言编写的字节码能够在浏览器内运行。[0052]本发明实施例提供的图片转码装置,集成于浏览器客户端,从服务端获取第一格式的第一图片,通过运行基于预设编程语言编写的预设字节码,将第一图片转码成第二格式的第二图片,供浏览器客户端进行显示,其中,第二格式与第一格式不同,第二图片和第一图片的图片内容一致,基于预设编程语言编写的字节码能够在浏览器内运行。通过采用上述技术方案,在存在图片格式转换需求时,不需要在服务端对图片进行二次转码,可以在浏览器客户端内部进行图片格式的转换,从而避免消耗服务器运算资源,也不需要在服务器存储转码前和转码后的两份图片,节省服务器存储空间。[0053]本发明实施例提供了一种计算机设备,该计算机设备中可集成本发明实施例提供的图片转码装置。图4为本发明实施例提供的一种计算机设备的结构框图。计算机设备400包括存储器401、处理器402及存储在存储器401上并可在处理器402上运行的计算机程序,所述处理器402执行所述计算机程序时实现本发明实施例提供的图片转码方法。[0054]本发明实施例提供的计算机设备,在存在图片格式转换需求时,不需要在服务端对图片进行二次转码,可以在浏览器客户端内部进行图片格式的转换,从而避免消耗服务器运算资源,也不需要在服务器存储转码前和转码后的两份图片,节省服务器存储空间。[0055]本发明实施例还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行本发明实施例提供的图片转码方法。[0056]上述实施例中提供的图片转码装置、设备以及存储介质可执行本发明任意实施例所提供的图片转码方法,具备执行该方法相应的功能模块和有益效果。未在上述实施例中详尽描述的技术细节,可参见本发明任意实施例所提供的图片转码方法。[0057]注意,上述仅为本发明的较佳实施例。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由权利要求范围决定。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1