主权项 |
一种基于JPEG图片拼接的超大图片合成方法,其特征在于,具体步骤如下:步骤1、设置待排版版面的宽和高分别为W和H,W和H的单位均为像素,将待排版图片采用矩形件排样算法进行排版,使得待排版图片尽可能多的排列在设定的版面上并保证各待排版图片之间不相互重合,同时记录已排版照片的路径、大小以及在排版后的版面中的位置信息;步骤2、设置JPEG图片压缩取样方式,确定水平采样因子的最大值H<sub>max</sub>和垂直采样因子的最大值V<sub>max</sub>,H<sub>max</sub>和V<sub>max</sub>的单位均为像素,则JPEG图片的最小编码单元MCU的宽为H<sub>max</sub>*8,高为V<sub>max</sub>*8;步骤3、分块生成每块画布C<sub>i</sub>,i=0,1,2,……:令画布C<sub>i</sub>的宽W<sub>i</sub>=W,i=0,1,2,……,计算W<sub>i</sub>/(H<sub>max</sub>*8),如果W<sub>i</sub>/(H<sub>max</sub>*8)的值为整数,则在该画布的每一行上最小编码单元MCU的个数R<sub>i</sub>=W<sub>i</sub>/(H<sub>max</sub>*8);如果W<sub>i</sub>/(H<sub>max</sub>*8)的值不为整数,则将该值舍去小数部分并加1后赋值给R<sub>i</sub>;令画布C<sub>i</sub>的高H<sub>i</sub>包含n个MCU,则H<sub>i</sub>=n*(V<sub>max</sub>*8),n为正整数,且n的取值应满足以下条件:n*R<sub>i</sub><=65535;画布为将原始大图即步骤1得到的排版后的版面进行分块生成的每一块小图时,当前块图片占用的矩形区间;计算生成画布的块数k:计算H/H<sub>i</sub>,如果H/H<sub>i</sub>的值为整数,则k=H/H<sub>i</sub>,如果H/H<sub>i</sub>的值不为整数,则将该值舍去小数部分并加1后赋值给k;步骤4、根据步骤1得到的已排版照片的路径和其在版面中的位置信息,依次循环将已排版照片绘制到步骤3得到的每一块画布上;步骤5、对步骤4中得到的第一块绘制成功的画布,根据步骤2设定的图片压缩取样方式生成JPEG图片,并将得到的图片的数据信息保存于内存中;对步骤4得到的除第一块以外其余绘制成功的各块画布,根据步骤2设定的图片压缩取样方式分别生成JPEG图片,并将得到的图片的数据信息去掉本图片头部后的信息后追加到前一幅图片的尾部,在相邻两幅图片的连接处将前一幅图片的结束标志FFD9修改为重入标记FFDn,n为0~7的循环;步骤6、修改步骤5最终得到的JPEG图片的头部信息,将该头部信息中表示图片宽和高的字节修改为全部块画布总的宽和高信息,最后将内存中的字节流生成超大图片。 |