導航:首頁 > 文件處理 > libjpeg壓縮jpg

libjpeg壓縮jpg

發布時間:2022-05-28 00:04:37

① 寫數據到JPG使用libexif問題,怎麼解決

libjpeg中的jpeg_read_header函數用於讀取jpeg數據頭部的基本信息,以下為jpeg_read_header的定義。
/* Decompression startup: read start of JPEG datastream to see what's there */
EXTERN(int) jpeg_read_header (j_decompress_ptr cinfo, boolean require_image);1212

有時候我們知道圖像的基本信息,根據這些信息再決定是不是要解壓縮這個圖像,這時就可以用這個函數在不對圖像解碼的情況下獲取圖像的基本信息。
以下是代碼實現
/* (不解壓縮)讀取jpeg格式的內存數據塊的基本信息返回image_matrix_pram對象
* 如果數據為空或讀取數據出錯拋出 jpeg_mem_exception
*/
image_matrix_pram read_jpeg_header_mem(uint8_t *jpeg_data,size_t size) {
if(nullptr==jpeg_data||0==size)
throw jpeg_mem_exception("empty image data");
// 定義一個壓縮對象
jpeg_decompress_struct dinfo;
//用於錯誤信息

② 用opencv讀圖,縮略以後用libjpeg壓縮圖像失真

圖片有一列像素錯位導致的,可能是圖片長寬不是2的n次方或者2的倍數造成的

③ 如何在windows環境下配置libjpeg

使用libjpeg源代碼實現讀取jpeg格式圖片,生成.lib方法如下:

1、下載最新的函數庫,解壓縮後放到一個目錄中例如: c:/temp/jpeglib-8c/

2、生成頭文件jconfig.h,新建一個文件命名為jconfig.h,拷貝程序庫中jconfig.vc內容到剛建立的文件中。

3、進入命令行模式RUN->CMD,然後執行 nmake -f makefile.vc 生成所需要的libjpeg.lib函數庫。
(原創-出錯處理)注意:這一步有兩個錯誤出現:
A、makefile.vc<11>:fatal error U1052: file 'win32.mak' not found
提示找不到win32.mak文件,這個文件定義了一些必須的宏,這個文件在Windows SDK的安裝目錄中,打開makefile.vc文件修改第12行為: !include <C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\win32.mak> 保存,再執行編譯命令又有新的錯誤。
B、 運行,發現這一步可以過得去了,但又有新的錯誤,此時,我選擇先設定運行環境 :搜索「vcvars32.bat」拷貝到jpeglib-8c目錄下,運行,然後再運行nmake -f makefile.vc ,此時發現一切問題全部解決

最後生成我們所需要的文件:libjpeg.lib。
4. vs2008注意包含庫文件(附件--項目。。。)

④ 請問你對libjpeg庫熟悉嗎我想驗證下 《libjpeg實現內存內點陣圖的壓縮及解壓縮》,可是還是出錯了

其實直接傳個FILE *給libjpeg就好了。。。用完之後再把臨時文件刪掉就是。。。。
內存做的話,還是仔細讀讀那個庫的源碼比較好。。

另外 , LINK 2001的錯誤的話不是修改的問題吧。。。你核實一下用到的.lib/.a有沒有連接,,如果是libjpeg連接時的問題的話,,你應該確定下是不是所有有效的.c文件都在。

⑤ 關於JPEG的解碼問題

這個bits的劃分,其實就是靠霍夫曼碼控制的。之所以用霍夫曼編碼,是因為這個編碼是唯一的,不可能有重復,如果像你所說的那樣,隨意劃分的話,只能導致錯誤。
霍夫曼編碼中,當你從當前的碼流中提取若干比特,程序會查詢霍夫曼表中是否有對應的編碼,如果有,則會檢出一個length值,代表這個編碼佔用多少bit, 若沒有查到,程序會逐一增加後續bit繼續查表,直到查到為止。經此而已。
建議你仔細研究研究霍夫曼編碼相關論文。

⑥ 如何使用libtiff讀取使用jpeg壓縮過的tiff文件

當你在tiffconf.h中定義 JPEG_SURPPORT或OJPEG_SUPPORT後就需要IJG的libjpeg庫,就是你說的"把jpeglib.lib庫加入編譯tifflib工程"

因為修改了libjpeg庫所以需要重新編譯libjpeg庫

你在libtiff的目錄下可以看到上面的說明 contrib\ojpeg\目錄下

如果只定義JPEG_SUPPORT就不需要看上面的幫助

⑦ 將攝像頭採集的YUV格式的數據,通過libjpeg庫轉換為jpg格式的圖片,出現了失真(圖片花屏,很亂有陰影)

攝像頭採集的圖片,在保證格式轉換正確下,如果是4乒乓操作的話,注意開始保存的第一幀是必須丟棄的。且對YUV格式是420或422等數據偏移要保證正確。花屏、陰影就是理解號乒乓操作

⑧ jpeg圖片解壓縮成bmp圖片後質量能變好么

用libjpeg庫將jpeg圖

⑨ 如何使用libjpeg

本文只介紹jpeg壓縮的相關內容,剛開始我貪圖省事,採用微 軟 的GDI Plus提供的功能,很是方便,先獲取jpg圖像的編碼,然後根據圖像的點陣圖數據創建一個Bitmap類的對象,再保存圖像為jpg格式就行了。但是我對 GDI+還是很信任,總感覺不踏實(沒有理由的),我們的系統一旦安裝就要長期運行,我就是擔心長期運行一段時間後GDI+會出問題,結果也證實了我的擔 心,我們實際使用的10套系統中有一套,連續運行3-5天後,GDI+就會崩潰,於是我決心採用IJG JPEG Library。您可以到
站下載libjpeg的源碼, IJG JPEG Library就是jpeg壓縮庫,是以源碼的形式提供給軟體開發人員的,當然在軟體包里也有編譯好的庫文件,我們這里就只用到其中的 libjpeg.lib,jconfig.h,jmorecfg.h,jpeglib.h這幾個文件,下面我就介紹一下怎樣在自己的程序里嵌入圖像壓縮功 能。
一、建立編譯環境
所謂建立編譯環境,其實非常簡單,就是把上面提到的4個文件拷 貝到你的項目文件夾下,把libjpeg.lib添加到你的項目中,然後在你完成壓縮功能的那個文件里加入#include "jpeglib.h",需要注意的是,libjpeg.lib是用c語言開發的,如果要用在你的C++程序里,需要用到extern "C",如下:
// TestLibjpeg.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "memory.h"
extern "C" {
#include "jpeglib.h"
}
二、壓縮步驟
1、申請並初始化jpeg壓縮對象,同時要指定錯誤處理器
struct jpeg_compress_struct jcs;
// 聲明錯誤處理器,並賦值給jcs.err域
struct jpeg_error_mgr jem;
jcs.err = jpeg_std_error(&jem);
jpeg_create_compress(&jcs);
2、指定壓縮後的圖像所存放的目標文件,注意,目標文件應以二進制模式打開
f=fopen("03.jpg","wb");
if (f==NULL)
{
delete [] data;
delete [] pDataConv;
return 0;
}
jpeg_stdio_dest(&jcs, f);
3、設置壓縮參數,主要參數有圖像寬、高、色彩通道數(1:索引圖像,3:其他),色彩空間(JCS_GRAYSCALE表示灰度圖,JCS_RGB表示彩色圖像),壓縮質量等,如下:
jcs.image_width = nWidth; // 為圖的寬和高,單位為像素
jcs.image_height = nHeight;
jcs.input_components = 1; // 在此為1,表示灰度圖, 如果是彩色點陣圖,則為3
jcs.in_color_space = JCS_GRAYSCALE; //JCS_GRAYSCALE表示灰度圖,JCS_RGB表示彩色圖像
jpeg_set_defaults(&jcs);
jpeg_set_quality (&jcs, 80, true);
需要注意的是,jpeg_set_defaults函數一定要等設 置好圖像寬、高、色彩通道數計色彩空間四個參數後才能調用,因為這個函數要用到這四個值,調用jpeg_set_defaults函數後,jpeglib 庫採用默認的設置對圖像進行壓縮,如果需要改變設置,如壓縮質量,調用這個函數後,可以調用其它設置函數,如jpeg_set_quality函數。其實 圖像壓縮時有好多參數可以設置,但大部分我們都用不著設置,只需調用jpeg_set_defaults函數值為默認值即可。
4、上面的工作準備完成後,就可以壓縮了,壓縮過程非常簡單, 首先調用jpeg_start_compress,然後可以對每一行進行壓縮,也可以對若干行進行壓縮,甚至可以對整個的圖像進行一次壓縮,壓縮完成後, 記得要調用jpeg_finish_compress函數,如下:
jpeg_start_compress(&jcs, TRUE);
JSAMPROW row_pointer[1]; // 一行點陣圖
int row_stride; // 每一行的位元組數
row_stride = jcs.image_width; // 如果不是索引圖,此處需要乘以3
// 對每一行進行壓縮
while (jcs.next_scanline < jcs.image_height) {
row_pointer[0] = & pDataConv[jcs.next_scanline * row_stride];
jpeg_write_scanlines(&jcs, row_pointer, 1);
}
jpeg_finish_compress(&jcs);
5、最後就是釋放壓縮工作過程中所申請的資源了,主要就是jpeg壓縮對象,由於在本例中我是直接用的局部變數,所以只需調用jpeg_destroy_compress這個函數即可,如下:
jpeg_destroy_compress(&jcs);
三、解壓縮步驟
解壓縮步驟與壓縮步驟非常相似,只是解壓縮對象為jpeg_decompress_struct類型,步驟如下:
1、聲明並初始化解壓縮對象,同時制定錯誤信息管理器
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);
2、打開jpg圖像文件,並指定為解壓縮對象的源文件
FILE *f = fopen(strSourceFileName,"rb");
if (f==NULL)
{
printf("Open file error!\n");
return;
}
//
jpeg_stdio_src(&cinfo, f);
3、讀取圖像信息
jpeg_read_header(&cinfo, TRUE);
4、根據圖像信息申請一個圖像緩沖區
data = new BYTE cinfo.image_width*cinfo.image_height*cinfo.num_components];
5、開始解壓縮
jpeg_start_decompress(&cinfo);
JSAMPROW row_pointer[1];
while (cinfo.output_scanline < cinfo.output_height)
{
row_pointer[0] = &data[(cinfo.output_height - cinfo.output_scanline-1)*cinfo.image_width*cinfo.num_components];
jpeg_read_scanlines(&cinfo,row_pointer ,
1);
}
jpeg_finish_decompress(&cinfo);
6、釋放資源
jpeg_destroy_decompress(&cinfo);
fclose(f);
好了,利用IJG JPEG Library進行圖像壓縮就介紹到這里,希望對大家有所幫助,實例代碼已經實現了圖像的壓縮和解壓縮的全部功能,命令格式 為:「TestLibjpeg.exe j|j24|b 源文件名 目標文件名」,其中,j選項將源文件壓縮為jpg格式,不改變色彩模式,j24選項將源文件壓縮為24為jpg格式,b選項將源文件解壓縮為bmp格式, 該實例並沒有提供文件有效性的驗證,如果要引入自己的代碼,請自己實現文件有效性的驗證。

⑩ 怎麼用PHP壓縮GIF圖

縮圖小軟體ImageResizerPowertoys
微軟出品的免費縮圖小軟體,它不但能夠快速、批量地縮小圖片,而且操作超級簡單。安裝結束後,它會在你的滑鼠右鍵菜單中嵌入一個"ResizePicture"項。在圖片文件上點右鍵選這個"ResizePicture"即可設置你希望縮小的圖片尺寸。

JPEG Imager 2.1.2.25 漢化版
JPEG Imager 能將 BMP、JPG、PNG、GIF 等格式的圖形文件進行壓縮,使文件變得更小,可自設壓縮比例、大小、明暗度等等,它採用了一種新壓縮演算法:「智能過濾(smart filtration)」不僅可以改善圖像的觀感質量,而且還可為輸出的圖片「減肥」,允許壓縮後的圖形文件不失真。還可以建立類似於漸變 GIF 效果的漸變式 JPEG 圖像,這種形式的 JPEG 圖像應用於網頁製作可使網頁讀取的速度加快。它的特點還包括對圖像進行批量處理高效建立縮略圖以及利用自帶的濾鏡、圖像編輯器對圖形進行簡單的處理等。

閱讀全文

與libjpeg壓縮jpg相關的資料

熱點內容
南昌朝陽解壓娛樂 瀏覽:847
linux所有命令無效 瀏覽:280
如何更新伺服器2016密碼 瀏覽:291
guidjava生成 瀏覽:904
vs編譯出來的文件在哪裡 瀏覽:525
類似程序員一樣思維的人 瀏覽:606
解壓縮與命令行解壓縮 瀏覽:189
電腦常用的命令有哪幾個 瀏覽:553
古典針灸入門pdf 瀏覽:885
構建高可用linux伺服器第2版 瀏覽:344
單片機控制機械 瀏覽:442
編譯器dev運行 瀏覽:869
通達信選股源碼指標源 瀏覽:278
戴爾伺服器電源為什麼都是剪線 瀏覽:33
java面試寶典下載 瀏覽:826
git撤銷命令 瀏覽:658
藍牙模塊單片機 瀏覽:130
修改加密游戲存檔 瀏覽:370
KMS伺服器地址Office2019 瀏覽:193
win2008如何布置ntp伺服器 瀏覽:815