⑴ 如何壓縮圖片大小
我們可以藉助軟體進行圖片大小的壓縮,這里介紹利用美圖秀秀進行壓縮:
1、首先打開美圖秀秀軟體,然後點擊右上角的打開按鈕,打開需要更改的圖片。
⑵ 上傳圖片時讓我壓縮到1M以下,怎樣壓縮
a、打開任意瀏覽器,點擊瀏覽器的搜索框,在這里搜索圖片壓縮,選擇網頁搜索,我們要找到下載工具的網頁,將工具下載安裝到我們的電腦。
e、最後我們點擊文件頁面上的「開始壓縮」按鈕,對圖片文件進行壓縮。
⑶ 怎樣把圖片縮小
這個很容易實現啊,比如用這個在線圖片壓縮工具,想把圖片文件的大小減到多少都行,直接設置一下數值,馬上瞬間就能完成了。在線智能壓縮圖片大小,圖片降低像素,PNG|JPG大圖縮小
▼ 在線一鍵壓縮圖片步驟:
一、首先點擊加號添加需要壓縮的圖片。目前已知支持對jpg、png等多種常見的圖片格式進行壓縮,如果上傳圖片並壓縮成功,則代表支持該圖片格式。
二、可以自行修改圖片需要被壓縮到的最大寬高尺寸,默認為圖片原始的寬高尺寸,且寬高比例是自動鎖定的。
三、必須設置圖片被壓縮後,期望輸出的圖片文件的最大佔用空間。(必填項)
四、選擇圖片生成的演算法。默認為混合優先演算法,絕大多數情況下使用默認演算法即可。
五、壓縮的設定值不能小於1Kb,但圖片壓縮的最終效果可以小於1Kb。
⑷ 怎麼把手機圖片壓縮到200k
背景
在手機上用戶隨手拍一張衣服的照片,去找類似圖片的需求比較明顯,以圖搜圖項目目的就是滿足用戶的這部分需求。
該項目初步預計5個類目,每個類目500萬圖片用於檢索。經過特徵提取,每張圖片可以表示為30976維空間中的一個點,即可以用30976個float值表示,為了便於處理,我們將特徵值乘以100000,在不損失float值精度的情況下,用int32_t存儲圖片特徵。
圖片檢索時需要計算query 圖片和索引圖片的歐式距離,圖片之間計算歐式距離的耗時為50微秒,經過cpu指令集優化(sse),歐式距離計算耗時減少到13微秒。
在壓縮之前,所有圖片的大小為 3T( 4 * 30k * 25000000),每台機器30G內存用於存儲圖片,需要100台機器存儲全量圖片。
需要在計算歐式距離效率不降低的情況下,對圖片進行壓縮,大規模減少機器的佔用。
我們的目標是壓縮到500G左右,即壓縮之後每張圖片20k左右,歐式距離計算耗時為15微秒左右。
歐式距離計算要求耗時在微秒級別,已有的壓縮方法,比如p4delta、valgrind壓縮等在性能上不滿足要求,需要我們根據數據特點自己定製壓縮方法。
成果
目前的壓縮方法單張圖片由120k 壓縮到了平均13k。
歐式距離計算平均耗時為9微秒。
這么靠譜的成果是如何做到的呢?
初步嘗試
bitmap的方法
觀察數據特點,發現平均每張圖片有7000個數為非0值,其他值都為 0。首先想到的是用bitmap表示30976個值在特定的位置是否是0。bitmap需要30976 / 8= 4k個位元組。然後只存儲非0值,需要7k * 4,壓縮之後平均每張圖片大小為32k。壓縮代碼大體如下:
int bitmap_len = size / 8 + 8;
uint64_t *bitmap = (uint64_t*)(cmpr_buf);
int32_t *data = (int32_t*)(cmpr_buf + bitmap_len);
for(unsigned int i=0;i<size;i++) {
if(list[i] != 0) {
data[index++] = list[i];
bitmap[i/64] |= bit_mask_tab[i % 64];
}
}
但是在計算圖片之間的歐式距離時,需要遍歷30976次bitmap,並判斷特定位的值知否為0,即將bitmap和掩碼數組進行與操作,比較耗時,計算耗時在100微秒以上。計算兩個壓縮圖片的歐式距離代碼:
for(i=0; i<size/64; i++) { for(int j=0; j<64; j++) { a = 0; b = 0; if((bitmap1[i] & bit_mask_tab[j])) { a = data1[index1++]; } if((bitmap2[i] & bit_mask_tab[j])) { b = data2[index2++]; } olength += (a - b) * (a - b); } }
採用offset的壓縮方式
我們只保存非0數據的off_set和value,off_set最大值30975,需要用int16_t來保存,value的范圍0~100萬,需要int32_t來表示,採用該方法的話,每個圖片佔用空間為42k (7k * (2 + 4))。
for(int i=0; i<size; i++) {
if(list[i] != 0) {
index++;
}
}
*(int16_t*) cmpr_buf = index;
int16_t *p_off = (int16_t*)cmpr_buf + 1;
int32_t *p_data = (int32_t*)(((char *)cmpr_buf) + sizeof(int16_t) * index + sizeof(int16_t));
index = 0;
for(int i=0; i<size; i++) {
if(list[i] != 0) {
p_off[index] = i;
p_data[index] = list[i];
index++;
}
}
計算兩個壓縮圖片的歐式距離的時候,採用按照off_set歸並的方法:
while(p_data1<end1 && p_data2 < end2){
if(*p_off1 < *p_off2) {
olength += *p_data1 * *p_data1;
p_data1++;
p_off1++;
} else if(*p_off1 > *p_off2) {
olength += *p_data2 * *p_data2;
p_data2++;
p_off2++;
} else {
olength += (*p_data1 - *p_data2) * (*p_data1 - *p_data2);
p_data1++;
p_data2++;
p_off1++;
p_off2++;
}
}
該方法進行歐式距離的耗時為55微秒,我們認為是if 條件比較耗時,於是嘗試了用位掩碼替代if的方式:
while(p_data1 < end1 && p_data2<end2) {
a = ((*p_off1 - *p_off2) <= 0);
b = ((*p_off2 - *p_off1) <= 0);
tmp1 = -a & *p_data1;
tmp2 = -b & *p_data2;
p_off1 += a;
p_off2 += b;
p_data1 += a;
p_data2 += b;
tmp = tmp1 - tmp2;
olength += tmp * tmp;
}
該方式消除了if 條件判斷,但是耗時為70微秒,性能反而下降了,耗時的原因是cpu的指令增多了。
性能優化
場景分析
兩個壓縮圖片計算 --> 一個壓縮一個非壓縮
目前的優化進入了一個瓶頸,如何才能提升性能到10微秒級別呢?我們回過頭來重新考慮了一下應用場景,在線的場景是query圖片和一系列圖片計算距離,離線的場景是中心點圖片和其他一系列圖片計算距離也就是說都是一個圖片和多個圖片進行距離計算,這時一個圖片不需要進行壓縮,完全可以是非壓縮的,即使該圖片是壓縮也可以先解壓計算歐式距離實際上可以轉化為一個非壓縮圖片和多個壓縮圖片計算歐式距離。對這樣的情況,我們需要重新考慮提升效率的問題。
確定採用off_set壓縮方式
對於計算一個壓縮和一個非壓縮圖片歐式距離的問題,比較bitmap的壓縮方式和off_set的壓縮方式,off_set的壓縮方式有明顯的優勢對於bitmap方式,最耗時的地方仍然是訪問30976次bitmap,然後做與操作,來獲取解壓後的值,遍歷30976次bitmap耗時,至少50微秒以上但是off_set的方式保存了7000個非0數據的off_set,我們只需要遍歷7000次非0 數組就可以計算出歐式距離。
一個壓縮一個非壓縮
做法
首先計算好非壓縮圖片的累加平方和,每次查詢計算多次歐式距離,只計算一次累加平方和。
遍歷壓縮圖片數組,計算該值和另一張非壓縮圖片的對應off_set的差值的平方。
對於壓縮圖片的為0的那些值來說,歐式距離只需要加上非壓縮圖片那些值的平方和。
舉例:
a.非壓縮圖片:[0 2 3 0 4 0 0 5 6 0 0] ,壓縮圖片:[0 0 0 6 6 6 0 0 ]
b.事先計算好非壓縮圖片的特定位之前的所有值的平方和:sqrt[0 4 13 13 29 29 29 54 90 90 90]
c.壓縮的數組為 off[3 4 5], data[6 6 6 ]
d.遍歷off和data數組
olength += (6 - 0) * (6 - 0) olength += (sqrt[2] - sqrt[0])
olength += (6 - 4) * (6 - 4)olength += (sqrt[3] - sqrt[3])
olength += (6 - 0) * (6 - 0) olength += (sqrt[4] - sqrt[4])
效率:20微秒
該方法只需要遍歷7000次數組, 進行7000次相減 平方操作和 7000次訪問sqrt 數組操作,大大簡化了復雜度。
代碼如下:
data1為壓縮數據,data2為非壓縮數據:
for(int i=0; i<num; i++) {
olength += (data1[i] - data2[off1[i]]) * (data1[i] - data2[off1[i]]);
olength += sqrt[off[i] - 1] - sqrt[off[i-1]];
}
⑸ 怎麼壓縮圖片的大小
用這個在線圖片壓縮工具,想把圖片文件的大小減到多少都行,比如你直接設置一下壓縮數值到600kb,馬上瞬間就能把圖片的文件大小壓縮到600kb搞定,你設定壓縮到多少kb,他壓縮完輸出的圖片就是多少kb,方便得很。在線智能壓縮圖片大小,圖片壓縮體積
在線圖片智能壓縮使用步驟:
一、首先點擊加號添加需要壓縮的圖片。目前已知支持對jpg、png等多種常見的圖片格式進行壓縮,如果上傳圖片並壓縮成功,則代表支持該圖片格式。
二、可以自行修改圖片需要被壓縮到的最大寬高尺寸,默認為圖片原始的寬高尺寸,且寬高比例是自動鎖定的。
三、必須設置圖片被壓縮後,期望輸出的圖片文件的最大佔用空間。(必填項)
四、選擇圖片生成的演算法。默認為混合優先演算法,絕大多數情況下使用默認演算法即可。
五、壓縮的設定值不能小於1Kb,但圖片壓縮的最終效果可以小於1Kb。
butterpig
⑹ 如何用c語言實現壓縮圖片內存大小
是(row,col,value),這樣把所有不為零的值組成一個向量。這種存儲方式比二維數組節省了不少空間,當然還可以進一步節省,因為三元組裡面row或者col重復存儲了,一行或者一列存一次就行了,按這種思路走下去就是行壓縮存儲了。
那具體什麼是行壓縮存儲呢?行壓縮存儲的思想就是,把所有不為零的值按行訪問的順序組成一個向量,然後再把每一行值不為0的列的下標存下來,這個兩個向量的大小和稀疏矩陣中不為0的值得個數相同,當然要實現對行壓縮矩陣的訪問,還要把每一行的不為0的列的下標在第二個向量中開始的位置存下來,有人把這個叫做指針。有了這三個向量就可以實現對矩陣實現高效的按行訪問了。行壓縮存儲比三元組優秀的不僅是空間的壓縮,還有就是行訪問時的高效。三元組如果是有序的,可以二分查找來訪問一行,但是行壓縮存儲按行訪問時的時間復雜度是常數級的。 大家可以參考下面這個行壓縮矩陣示意圖:
⑺ 圖片文件怎樣壓縮到20K以內
想要將JPG格式照片壓縮至20KB,最主要的問題是圖片尺寸大小。分享一款小編經常使用的壓縮軟體,小夥伴們可以放心下載哈~⑻ 如何壓縮大量照片
照片很多的話,壓縮的時候肯定希望能壓縮的快、節省時間,這里推薦一款在線照片壓縮工具:壓縮圖網站的批量雲端壓縮功能,一次最多壓縮60張圖片
1、點擊批量雲端壓縮,批量雲端壓縮一次最多能夠60張圖片同時處理。
批量雲端壓縮功能
⑼ 怎麼將照片壓縮到30K以內變成證件照
方法如下:
工具/原材料:win7電腦。
1、打開win7電腦在菜單程序里找到並點擊「畫圖」程序;
證件照背景顏色
白色背景:用於護照、簽證、駕駛證、身份證、二代身份證、駕駛證、黑白證件、醫保卡、港澳通行證等。
藍色背景:用於畢業證、工作證、簡歷等(藍色數值為:R:0 G:191 B:243或C:67 M:2 Y:0 K:0)。
紅色背景:用於保險、醫保、IC卡、暫住證、結婚照(紅色數值為:R:255 G:0 B:0或C:0 M:99 Y:100 K:0)。
⑽ 上傳圖片時文件過大怎麼辦
可以使用photoshop軟體將圖片的品質調低,就可以將圖片文件大小變小。具體的設置方法如下:
一、打開photoshop軟體界面,點擊左上角的文件選擇打開按鈕。