一種jpeg圖片的裁剪方法
2023-07-18 05:11:51
專利名稱:一種jpeg圖片的裁剪方法
技術領域:
本發明涉及圖像處理領域,特別涉及一種JPEG圖片的裁剪方法。
背景技術:
現實應用中往往需要對圖片進行裁剪處理,而JPEG是目前應用最廣泛的圖 片格式之一,因此對JPEG圖片進行裁剪處理是一種普遍的應用。由於JPEG圖 片形成時是打亂了各像素數據的排放順序的,所以不能直接對其裁剪。目前的 常用方法是先將其解壓為按圖像像素的物理位置順序排放的RGB點陣數據,然 後再對點陣數據進行裁剪,最後又將裁剪後的小塊圖片壓縮為JPEG格式。由於 這種方法進行了完整的JPEG解碼和重新編碼的全過程,導致效率低下,並且會 導致圖像質量的下降。
發明內容
本發明的目的在於克服現有技術的缺點和不足,提供了一種JPEG圖片的裁 剪方法,簡單、容易的實現了 JPEG圖片的裁剪,大大的提高了效率。
本發明目的是通過下述技術方案實現的, 一種JPEG圖片的裁剪方法,包括 以下步驟
(1) 加載被裁剪的JPEG圖片,讀取圖像的壓縮數據和解碼必需的圖片信
自
/K、,
(2) 對圖片的壓縮數據進行熵解碼,得出每個MCU (Minimum Coded Unit 最小處理單元)的組成數據;
(3) 裁剪圖片,根據裁剪後圖片在原圖片中的位置,確定裁剪後圖片所包 含的MCU,並將這些MCU的組成數據構成一個MCU數據集合;
(4) 根據步驟(3)的MCU數據集合以及步驟(1)所述的圖片信息,按 照JPEG圖片的文件格式寫入新的文件中,得到裁剪後的JPEG圖片。
為更好的實現本發明,所述解碼必需的圖片信息,具體包括熵編碼表、量 化表、採樣係數以及圖片的寬、高信息。
所述步驟(3)根據裁剪後圖片在原圖片中的位置,確定裁剪後圖片所包含的MCU,具體為,若當所期望的裁剪的圖片不是由整數個MCU組成時,裁剪 圖片時向右和\或向下擴展裁剪的尺寸,使裁剪到的圖片是由整數個MCU組成, 然後在進行步驟(4)的按照JPEG圖片的文件格式寫入新的文件時,則按照擴 展前所期望的裁剪圖片的寬和高寫入文件。
所述步驟(3)根據裁剪後圖片在原圖片中的位置,確定裁剪後圖片所包含 的MCU,具體為,若當所裁剪的圖片不是由整數個MCU組成時,裁剪圖片時 向左和\或向上擴展裁剪的尺寸,或者向左和\或向上且向右和\或向下擴展裁剪的 尺寸,使裁剪到的圖片是由整數個MCU組成,然後在進行步驟(4)的按照JPEG 圖片的文件格式寫入新的文件時,其中圖片的寬度使用所期望裁剪的圖片的寬 度加向左擴展的寬度,高度使用所期望裁剪的圖片的高度加向上擴展的高度, 即得裁剪到的圖片;此時所期望的裁剪的圖片相對於實際得到的裁剪到的圖片 在起始坐標上存在一個偏移量(x,y),將其寫入到JPEG文件中的一個未使用的 APP段(Application,應用程式保留標記),在以後解析圖片時通過這個偏移量 和圖片的寬高來確定實際有效的圖像區域,即實際有效的圖像區域的寬為裁剪 到圖片的寬與偏移量x的差值,實際有效的圖像區域的高為裁剪到圖片的高與 偏移量y的差值,該實際有效的圖像區域位於裁剪到的圖片的右下角,實際有 效的圖像的右下角與裁剪到的圖片的右下角對齊。實際有效的圖像區域即為所 期望的裁剪的圖片。
本技術方案中,所述MCU的組成數據可以包括
交流分量熵解碼前的全部編碼數據;
以及
直流分量熵解碼前的全部編碼數據。 此時,所述步驟(3)具體包括以下步驟
(3.1) 用戶在原圖片中選定裁剪的圖片的位置及大小;
(3.2) 根據裁剪後JPEG圖片在原圖片中的位置,以及原圖片中MCU的大 小,確定裁剪後JPEG圖片所包含的MCU;
(3.3) 判斷裁剪後JPEG圖片所包含的MCU組成數據的直流分量的參考關 系是否發生變化,若是,則根據裁剪後新的參考關係做相應的修正;若不是則 直接進行步驟(3.4);
(3.4) 裁剪後JPEG圖片所包含的MCU組成數據構成一個MCU數據集合。 所述根據裁剪後新的參考關係做相應的修正,具體包括以下步聚
6(3.31) 根據原來JPEG圖片中直流分量的參考關係,計算當前的直流分量 的實際值和新的參考關係下前一個同顏色分量的直流分量的實際值;
(3.32) 用計算得到的當前直流分量的實際值減去新的參考關係下前一個同 顏色分量的直流分量的實際值,然後對這個差值進行熵編碼;
(3.33) 用得到的編碼數據代替原當前的直流分量的編碼數據。
本技術方案中,所述MCU的組成數據還可以只包括
交流分量熵解碼前的全部編碼數據;
以及
在熵解碼過程中得到的直流分量值。 此時,所述步驟(3)具體包括以下步驟
(3.1) 用戶在原圖片中選定裁剪的圖片的位置及大小;
(3.2) 根據裁剪後圖片在原圖片中的位置,以及原圖片中MCU的大小, 確定裁剪後JPEG圖片所包含的MCU;
(3.3) 裁剪後JPEG圖片所包含的MCU組成數據構成一個MCU數據集合。 所述步驟(4)根據步驟(3)的MCU數據集合以及步驟(1)所述的圖片
信息,按照JPEG圖片的文件格式寫入新的文件中,具體是指MCU數據集合中 的直流分量值根據裁剪後新的參考關係進行熵編碼後再寫入到新的文件中,而 MCU數據集合中交流分量熵解碼前的全部編碼數據則直接寫入到新的文件中。
本發明與現有技術相比,具有如下優點和有益效果
第一、本發明不需進行完整的JPEG解碼和重新編碼過程,即本發明不需對 圖片進行離散餘弦變換、反離散餘弦變換以及量化、反量化的處理,減少CPU 的消耗;同時,本發明在熵解碼時得到的交流分量的全部編碼數據可不加修改 的直接寫入到新的文件中得到裁剪後的JPEG圖片,從而避免多餘的處理,在保 證圖片的質量基礎上又大大降低了CPU的消耗,提高了效率。
第二、本發明以MCU為最小處理單元,對JPEG圖片的解碼過程只進行到 熵解碼,將熵解碼後各MCU的組成數據中直流分量的編碼數據根據裁剪的需求 進行必要的修正或直流分量值進行重新編碼,然後與交流分量的編碼數據一起 按原JPEG圖片的格式寫入到新的文件中,即可得到裁剪後的JPEG圖片,簡單、 容易的實現了 JPEG圖片的裁剪。
圖l-A是本發明一種JPEG圖片的裁剪方法的第一種工作流程圖; 圖l-B是本發明一種JPEG圖片的裁剪方法的第二種工作流程圖; 圖2是本發明一種JPEG圖片的裁剪方法向右擴展的示意圖; 圖3是本發明一種JPEG圖片的裁剪方法向下擴展的示意圖; 圖4是本發明一種JPEG圖片的裁剪方法向右和向下擴展的示意圖; 圖5是本發明一種JPEG圖片的裁剪方法向左擴展的示意圖; 圖6是本發明一種JPEG圖片的裁剪方法向上擴展的示意圖; 圖7是本發明一種JPEG圖片的裁剪方法向左和向上擴展的示意圖; 圖8是本發明一種JPEG圖片的裁剪方法向左、向上和向右擴展的示意圖; 圖9是本發明一種JPEG圖片的裁剪方法向上、向左和向下擴展的示意圖; 圖10是本發明一種JPEG圖片的裁剪方法向左、向下和向右擴展的示意圖; 圖11是本發明一種JPEG圖片的裁剪方法向上、向右和向下擴展的示意圖; 圖12是本發明一種JPEG圖片的裁剪方法向上、向右、向下和向左擴展的 示意圖13是本發明一種JPEG圖片的裁剪方法向上和向右擴展的示意圖; 圖14是本發明一種JPEG圖片的裁剪方法向上和向下擴展的示意圖; 圖15是本發明一種JPEG圖片的裁剪方向左和向下擴展的示意圖; 圖16是本發明一種JPEG圖片的裁剪方法向左和向右擴展的示意圖。
具體實施例方式
下面結合實施例及附圖,對本發明作進一步地詳細說明,但本發明的實施 方式不限於此。 實施例1
一種JPEG圖片的裁剪方法,見圖1-A,包括以下步驟
(1) 加載被裁剪的JPEG圖片,讀取圖像的壓縮數據和解碼必需的圖片信 息;所述解碼必需的圖片信息具體包括熵編碼表、量化表、採樣係數以及圖片 的寬、高信息。
(2) 對圖片壓縮數據進行熵解碼,得出每個MCU的組成數據;所述MCU 的組成數據包括
(A) 交流分量熵解碼前的全部編碼數據以及
(B) 直流分量熵解碼前的全部編碼數據。
8(3) 裁剪圖片,根據裁剪後圖片在原圖片中的位置,確定裁剪後圖片所包 含的MCU,並將這些MCU的組成數據構成一個MCU數據集合。
具體包括以下步驟
(3.1) 用戶在原圖片中選定裁剪的圖片的位置及大小;
(3.2) 根據裁剪後JPEG圖片在原圖片中的位置,以及原圖片中MCU的大 小,確定裁剪後JPEG圖片所包含的MCU;
(3.3) 判斷裁剪後JPEG圖片所包含的MCU組成數據的直流分量的參考關 系是否發生變化,若是,則根據裁剪後新的參考關係做相應的修正,即進入步 驟(3.31);若不是則直接進行步驟(3.4);
(3.31) 根據原來JPEG圖片中直流分量的參考關係,計算當前的直流分量 的實際值和新的參考關係下前一個同顏色分量的直流分量的實際值;(由於JPEG 是對直流分量的差值進行編碼的,即是對當前直流分量與前一個同顏色分量的 直流分量的差值進行編碼的,故熵解碼後得到的是當前直流分量與原參考關係 中前一個同顏色分量的直流分量的差值;而裁剪圖片後,當前直流分量的前一 個同顏色分量的直流分量可能發生改變,這種情況下就需要對當前直流分量熵 解碼後得到的熵解碼前的編碼數據做修正;因此,如果需要修正,則需先計算 當前的直流分量的實際值和新的參考關係下前一個同顏色分量的直流分量的實 際值。而當前直流分量的實際值的計算方法是用原參考關係中前一個同顏色分 量單元的實際直流分量值加上當前直流分量熵解碼後得到的差值。)
(3.32) 用計算得到的當前直流分量的實際值減去新的參考關係下前一個同 顏色分量的直流分量的實際值,然後對這個差值進行熵編碼;
(3.33) 用得到的編碼數據代替原當前的直流分量的編碼數據。 G.4)裁剪後JPEG圖片所包含的MCU組成數據構成一個MCU數據集合。
(4) 根據步驟(3)的MCU數據集合以及步驟(1)所述的圖片信息,按 照JPEG圖片的文件格式寫入新的文件中,得到裁剪後的JPEG圖片。(直流分 量編碼時是通過離散餘弦變換進行時空域向頻率域變換而得到的結果的一部 分,當裁剪後圖片中直流分量的參考關係發生變化,直流分量熵解碼前的編碼 數據就需要根據新的參考關係做相應的修正,修正後才能寫入新的文件中;而 交流分量編碼時是通過離散餘弦變換進行時空域向頻率域變換而得到的結果, 即使參考關係發生變化也不會影響結果,所以交流分量熵解碼前的全部編碼數 據可以不做任何修改的寫入到新的文件中。)實施例2
一種JPEG圖片的裁剪方法,見圖l-B包括以下步驟
(1) 加載被裁剪的JPEG圖片,讀取圖像的壓縮數據和解碼必需的圖片信 息;所述解碼必需的圖片信息具體包括熵編碼表、量化表、採樣係數以及圖片 的寬、高信息。
(2) 對圖片壓縮數據進行熵解碼,得出每個MCU的組成數據;所述MCU 的組成數據包括
(a) 交流分量熵解碼前的全部編碼數據以及
(b) 在熵解碼過程中得到的直流分量值。
(3) 裁剪圖片,根據裁剪後圖片在原圖片中的位置,確定裁剪後JPEG圖 片所包含的MCU,並將這些MCU的組成數據構成一個MCU數據集合;
具體包括以下步驟
(3.1) 用戶在原圖片中選定裁剪的圖片的位置及大小;
(3.2) 根據裁剪後圖片在原圖片中的位置,以及原圖片中MCU的大小, 確定裁剪後JPEG圖片所包含的MCU;
(3.3) 裁剪後JPEG圖片所包含的MCU組成數據構成一個MCU數據集合。
(4) 根據步驟(3)的MCU數據集合以及步驟(1)所述的圖片信息,按 照JPEG圖片的文件格式寫入新的文件中,其中MCU數據集合中的直流分量值 根據裁剪後新的參考關係進行熵編碼後再寫入到新的文件中(因為在熵編碼的 過程中,是要根據裁剪後新的參考關係進行的,所以不需要進行實施例1中修 正的步驟),而MCU數據集合中交流分量熵解碼前的全部編碼數據則直接寫入 到新的文件中,得到裁剪後的JPEG圖片。
在實施例1和實施例2中,若當所期望的裁剪的圖片不是由整數個MCU組 成時,裁剪圖片時向右和\或向下擴展裁剪的尺寸,使裁剪到的圖片是由整數個 MCU組成。此處包括3種情況, 一是只向右擴展,見圖2; 二是只向下擴展, 見圖3;三是同時向右和向下擴展,見圖4;其中,粗實線表示期望的裁剪圖片 區域,而粗虛線表示擴展後圖片的區域。
然後在進行步驟(4)的按照JPEG圖片的文件格式寫入新的文件時,則按 照擴展前所期望的裁剪圖片的寬和高寫入文件。以圖4為例,粗實線表示期望 的裁剪圖片區域,按虛線所示向右和向下擴展至整數個MCU,於是裁剪後的圖 片包含MCU0、 MCU1、 MCU4、 MCU5;取得這4個MCU熵解碼得到的組成數據,並構成一個MCU數據集合;將步驟(3)的MCU數據集合以及步驟(1) 所述的圖片信息,按照JPEG圖片的文件格式寫入新的文件中,其中圖片的寬、 高使用粗實線所示區域的寬、高。
另外,若當所裁剪的圖片不是由整數個MCU組成時,裁剪圖片時,向左和 \或向上擴展裁剪的尺寸,使裁剪到的圖片是由整數個MCU組成,此處包括3 種情況, 一是只向左擴展,見圖5; 二是只向上擴展,見圖6;三是同時向左和 向上擴展,見圖7;或者向左和\或向上且向右和\或向下擴展裁剪的尺寸,使裁 剪到的圖片是由整數個MCU組成,此處包括9種情況, 一是同時向左、上、右 擴展,見圖8; 二是同時只向上、左、下擴展,見圖9;三是同時向左、下、右 擴展,見圖10;四是同時向上、右、下擴展,見圖11;五是同時向上、右、下、 左擴展,見圖12;六是同時向上和向右,見圖13;七是同時向上和向下,見圖 14;八是同時向左和向下,見圖15;九是同時向左和向右,見圖16;其中,粗 實線表示期望的裁剪圖片區域,而粗虛線表示擴展後圖片的區域。
以圖12為例,圖片中每個MCU為16行16列,期望裁剪出第5行至第27 行、第4列到第28列之間區域的圖片(即粗實線所示的區域),同時向左、上、 右、下擴展至整數個MCU (即粗虛線所示的區域)。於是裁剪後的圖片包含 MCU0, MCU1, MCU4, MCU5。取得這4個MCU熵解碼得到的組成數據,並 構成一個MCU數據集合;將步驟(3)的MCU數據集合以及步驟(1)所述的 圖片信息,按照JPEG圖片的文件格式寫入新的文件中,其中圖片的寬度使用所 期望裁剪的圖片的寬度加向左擴展的寬度,高度使用所期望裁剪的圖片的高度 加向上擴展的高度(本例中寬、高分別為28和27),即得裁剪到的圖片;此時 所期望的裁剪的圖片相對於實際得到的裁剪到的圖片在起始坐標上存在一個偏 移量(x,y),此例中偏移量為(4, 5),將其寫入到JPEG文件中的一個未使用的 APP段(Application,應用程式保留標記),在以後解析圖片時通過這個偏移量 和圖片的寬高來確定實際有效的圖像區域,即實際有效的圖像區域的寬為裁剪 到圖片的寬與偏移量x的差值,實際有效的圖像區域的高為裁剪到圖片的高與 偏移量y的差值,該實際有效的圖像區域位於裁剪到的圖片的右下角,實際有 效的圖像的右下角與裁剪到的圖片的右下角對齊。實際有效的圖像區域(即右 下角寬為(28-4) x (27-5)的圖片)即為所期望的裁剪的圖片。
上述實施例為本發明較佳的實施方式,但本發明的實施方式並不受所述實 施例的限制,其他的任何未背離本發明的精神實質與原理下所作的改變、修飾、
ii替代、組合、簡化,均應為等效的置換方式,都包含在本發明的保護範圍之內。
權利要求
1、一種JPEG圖片的裁剪方法,其特徵在於,包括以下步驟(1)加載被裁剪的JPEG圖片,讀取圖像的壓縮數據和解碼必需的圖片信息;(2)對圖片的壓縮數據進行熵解碼,得出每個MCU的組成數據;(3)裁剪圖片,根據裁剪後圖片在原圖片中的位置,確定裁剪後圖片所包含的MCU,並將這些MCU的組成數據構成一個MCU數據集合;(4)根據步驟(3)的MCU數據集合以及步驟(1)所述的圖片信息,按照JPEG圖片的文件格式寫入新的文件中,得到裁剪後的JPEG圖片。
2、 根據權利要求1所述JPEG圖片的裁剪方法,其特徵在於,所述解碼必 需的圖片信息,具體包括熵編碼表、量化表、採樣係數以及圖片的寬、高信息。
3、 根據權利要求1所述JPEG圖片的裁剪方法,其特徵在於,所述MCU 的組成數據包括交流分量熵解碼前的全部編碼數據; 以及直流分量熵解碼前的全部編碼數據。
4、 根據權利要求3所述JPEG圖片的裁剪方法,其特徵在於,所述步驟(3) 具體包括以下步驟-(3.1) 用戶在原圖片中選定裁剪的圖片的位置及大小;(3.2) 根據裁剪後JPEG圖片在原圖片中的位置,以及原圖片中MCU的大 小,確定裁剪後JPEG圖片所包含的MCU;(3.3) 判斷裁剪後JPEG圖片所包含的MCU組成數據的直流分量的參考關 系是否發生變化,若是,則根據裁剪後新的參考關係做相應的修正;若不是則 直接進行步驟(3.4);(3.4) 裁剪後JPEG圖片所包含的MCU組成數據構成一個MCU數據集合。
5、 根據權利要求4所述JPEG圖片的裁剪方法,其特徵在於,所述根據裁 剪後新的參考關係做相應的修正,具體包括以下步聚(3.31) 根據原來JPEG圖片中直流分量的參考關係,計算當前的直流分量 的實際值和新的參考關係下前一個同顏色分量的直流分量的實際值;(3.32) 用計算得到的當前直流分量的實際值減去新的參考關係下前一個同 顏色分量的直流分量的實際值,然後對這個差值進行熵編碼;(3.33)用得到的編碼數據代替原當前的直流分量的編碼數據。
6、 根據權利要求1所述JPEG圖片的裁剪方法,其特徵在於,所述MCU 的組成數據包括交流分量熵解碼前的全部編碼數據; 以及在熵解碼過程中得到的直流分量值。
7、 根據權利要求6所述JPEG圖片的裁剪方法,其特徵在於,所述步驟(3) 具體包括以下步驟-(3.1) 用戶在原圖片中選定裁剪的圖片的位置及大小;(3.2) 根據裁剪後圖片在原圖片中的位置,以及原圖片中MCU的大小, 確定裁剪後JPEG圖片所包含的MCU;(3.3) 裁剪後JPEG圖片所包含的MCU組成數據構成一個MCU數據集合。
8、 根據權利要求6所述JPEG圖片的裁剪方法,其特徵在於,所述步驟(4) 根據步驟(3)的MCU數據集合以及步驟(1)所述的圖片信息,按照JPEG圖 片的文件格式寫入新的文件中,具體是指MCU數據集合中的直流分量值根據裁 剪後新的參考關係進行熵編碼後再寫入到新的文件中,而MCU數據集合中交流 分量熵解碼前的全部編碼數據則直接寫入到新的文件中。
9、 根據權利要求1所述JPEG圖片的裁剪方法,其特徵在於,所述步驟(3) 根據裁剪後圖片在原圖片中的位置,確定裁剪後圖片所包含的MCU,具體為, 若當所期望的裁剪的圖片不是由整數個MCU組成時,裁剪圖片時向右和\或向 下擴展裁剪的尺寸,使裁剪到的圖片是由整數個MCU組成,然後在進行步驟(4) 的按照JPEG圖片的文件格式寫入新的文件時,則按照擴展前所期望的裁剪圖片 的寬和高寫入文件。
10、 根據權利要求1所述JPEG圖片的裁剪方法,其特徵在於,所述步驟G) 根據裁剪後圖片在原圖片中的位置,確定裁剪後圖片所包含的MCU,具體為, 若當所裁剪的圖片不是由整數個MCU組成時,裁剪圖片時向左和\或向上擴展 裁剪的尺寸,或者向左和\或向上且向右和\或向下擴展裁剪的尺寸,使裁剪到的 圖片是由整數個MCU組成,然後在進行步驟(4)的按照JPEG圖片的文件格 式寫入新的文件時,其中圖片的寬度使用所期望裁剪的圖片的寬度加向左擴展 的寬度,高度使用所期望裁剪的圖片的高度加向上擴展的高度,即得裁剪到的 圖片;此時所期望的裁剪的圖片相對於實際得到的裁剪到的圖片在起始坐標上 存在一個偏移量(x,y),將其寫入到JPEG文件中的一個未使用的APP段,在以後解析圖片時通過這個偏移量和圖片的寬高來確定實際有效的圖像區域,即實 際有效的圖像區域的寬為裁剪到圖片的寬與偏移量X的差值,實際有效的圖像區域的高為裁剪到圖片的高與偏移量y的差值,該實際有效的圖像區域位於裁 剪到的圖片的右下角,實際有效的圖像的右下角與裁剪到的圖片的右下角對齊, 實際有效的圖像區域即為所期望的裁剪的圖片。
全文摘要
本發明公開了一種JPEG圖片的裁剪方法,包括以下步驟(1)加載被裁剪的JPEG圖片,讀取圖像的壓縮數據和解碼必需的圖片信息;(2)對圖片的壓縮數據進行熵解碼,得出每個MCU的組成數據;(3)裁剪圖片,根據裁剪後圖片在原圖片中的位置,確定裁剪後圖片所包含的MCU,並將這些MCU的組成數據構成一個MCU數據集合;(4)根據步驟(3)的MCU數據集合以及步驟(1)所述的圖片信息,按照JPEG圖片的文件格式寫入新的文件中,得到裁剪後的圖片。本方法不需進行完整的JPEG解碼和重新編碼過程,以MCU為最小處理單元,對JPEG圖片的解碼過程只進行到熵解碼,簡單、容易的實現了JPEG圖片的裁剪,提高了效率。
文檔編號G06T5/00GK101650826SQ20091019247
公開日2010年2月17日 申請日期2009年9月18日 優先權日2009年9月18日
發明者劉先材, 荊建營, 董友球, 谷新徵 申請人:廣東威創視訊科技股份有限公司