fragment在activity中的静态和动态用法_使用Matlab修改压缩Gif动态图片制作微信表情...
腳本之家
你與百萬開發者在一起
作者:theOwlAndPussyCat/焦旭光
引言
電腦里存了很多有意思的Gif動態圖片,閑暇想把這些動圖全導入微信表情,可是這些動圖很多大小超過了微信表情大小1MB的限制,要制作成表情只能壓縮圖像文件大小。網上有很多小的圖像處理軟件和圖像處理網站,嘗試了很多,效果都并不是很好。于是決定自己動手來處理圖像文件,讓文件滿足自己的要求。
動態Gif圖像由很多靜態圖像組成,壓縮方法無外乎有以下幾種:
1、對每張圖片進行裁剪,去掉無關緊要的背景。
2、每幀圖像進行適當縮放。
3、每張圖片降低色彩空間。
4、去除相似的靜態圖像,減少靜態圖像的數量。本想用PS來手動一幀一幀修改,無奈圖片太多,實在太麻煩。最后想到了使用做圖像處理最強大通用的工具Matlab來修改壓縮圖片。
先分享幾張我壓縮好制成微信表情的圖片^ω^
以下定義一些變量:
??gifname 需要處理的圖像名稱,完整路徑;
??cutname 處理之后的圖像名稱,完整路徑;
??cutregion 裁剪留下的方塊區域;
??scale 縮放比例;
??cindex 顏色空間,可取2,4,8,16,32,64,128,256;
??initframe 新圖像第一幀對應源圖像的幀數;
??stepframe 新圖像相鄰兩幀對應源圖像幀序數之差;
??stopframe 程序處理到源圖像該幀數時停止;
??delaytime 新圖像兩幀之間延遲時間
以下列出需要用到的重要函數:
??Imfinfo() 該函數用于獲取圖片信息,包括圖片的大小、格式、尺寸、顏色信息、修改時間等等。具體到Gif動圖,它會獲取到一個圖片信息的結構體矩陣,可求出矩陣元素個數,即圖片信息結構體的數量來獲取Gif中存儲的靜態圖片的數量。
??具體用法:info=imfinfo(gifname);
??Imread() 該函數用于讀取圖片文件中的數據。
??具體用法:[indeximage,indexcolor]=imread(gifname,'frames',1);
??imcrop() 該函數用于圖像的裁剪。
??具體用法:cutframe=imcrop(indeximage,indexcolor,cutregion);% cutregion=[1 1 100 100];
??imresize() 該函數用于圖像的縮放。
??具體用法:[resframe,resindexcolor]=imresize(cutframe,indexcolor,scale,'bilinear');
??ind2rgb() 索引顏色空間轉換為rgb顏色空間
??rgb2ind() rgb顏色空間轉換為索引顏色空間
程序完整源代碼如下:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function[sourframes,destframes,usedframes]=gifcut(argin1,argin2,argin3,argin4)
%輸入參數[源文件名,目標文件名],裁剪區域[左上右下],縮放比例,[顏色索引,起始幀,
間隔幀,終止幀,延遲時間(最小0.01s)]
%輸出參數[源文件幀數,目標文件幀數,從源文件截取幀的編號]
%此函數用于gif動態圖裁剪,縮小,色彩降低,截取
%終止幀設為0時,讀取到最后一幀;不輸入延遲時間,默認延遲時間為原視頻兩幀間延遲,
延遲時間設為0時,輸出gif兩幀間延遲時間為原視頻兩幀間延遲*間隔幀數,延遲時間不
為0,輸出gif兩幀間延遲時間就是設置的延遲時間
%代碼編寫:theOwlAndPussyCat/焦旭光/2019.08.27
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sourframes=0;
destframes=0;
usedframes=0;
cutregion=[0000];
scale=1.0;
cindex=256;
initframe=1;
stepframe=1;
stopframe=1;
if length(argin1)<1
error('There are not enough arguments')
return
else
gifname=argin1(1);
info=imfinfo(gifname);
sourframes=length(info)
delaytime=0.01*info(1).DelayTime;
cindex=power(2,info(1).BitDepth);
stopframe=sourframes;
if length(argin1)<2
error('There are not enough arguments.')
return
end
cutname=argin1(2);
cutregion=argin2;
scale=argin3;
if length(argin4)>0
cindex=argin4(1);
end
if length(argin4)>1
initframe=argin4(2);
end
if length(argin4)>2
stepframe=argin4(3);
end
if length(argin4)>3
if argin4(4)==0
stopframe=stopframe;
else
stopframe=argin4(4);
end
end
if length(argin4)>4
if argin4(5)==0
delaytime=0.01*delaytime*stepframe;
else
delaytime=argin4(5);
end
end
end
tempframe=1;
for i=1:stopframe
if i==initframe;
[indeximage,indexcolor]=imread(gifname,'frames',i);
cutframe=imcrop(indeximage,indexcolor,cutregion);
if scale~=1.0
[resframe,resindexcolor]=imresize(cutframe,indexcolor,scale,'bilinear');
else
resframe=cutframe;
resindexcolor=indexcolor;
end
rgbframe=ind2rgb(resframe,resindexcolor);
[recframe,recindexcolor]=rgb2ind(rgbframe,cindex);
imwrite(recframe,recindexcolor,cutname,'gif','Loopcount',inf,'DelayTime',delaytime);
tempframe=i;
usedframes=tempframe;
else if i==tempframe+stepframe && i>initframe
[indeximage,indexcolor]=imread(gifname,'frames',i);
cutframe=imcrop(indeximage,indexcolor,cutregion);
if scale~=1.0
[resframe,resindexcolor]=imresize(cutframe,indexcolor,scale,'bilinear');
else
resframe=cutframe;
resindexcolor=indexcolor;
end
rgbframe=ind2rgb(resframe,resindexcolor);
[recframe,recindexcolor]=rgb2ind(rgbframe,cindex);
imwrite(recframe,recindexcolor,cutname,'gif','WriteMode','append','DelayTime',delaytime);
tempframe=i;
usedframes=[usedframes,tempframe];
end
end
destframes=length(usedframes);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
該matlab自定義函數使用方法:
??將該函數保存為gifcut.m,文件夾下有testdog.gif文件,該文件大小為7.9MB,打開matlab調用此函數:
??gifcut(["文件夾路徑 estdog.gif","文件夾路徑smalldog.gif"],[1,1,650,434],0.5,[8,2,2]);
??用時176.077501 秒。生成文件smalldog.gif 大小為554KB。
??gifcut(["文件夾路徑 estdog.gif","文件夾路徑smalldog2.gif"],[1,1,650,434],0.5,[8,2,3,0,0.2]);
??用時118.895854 秒。掉幀略多。生成文件small_dog2.gif 大小為374KB。范例文件如下:
最后是贊賞碼,小國企程序員窮哭求打賞 T^T __ORZ
參考文獻:
Matlab R2018b幫助文檔
源碼下載:
后臺回復關鍵字“微信表情源碼”即可獲取下載地址
本文作者:焦旭光
聲明:本文為 腳本之家專欄作者 投稿,未經允許請勿轉載。
●??2019 編程語言排行榜:Java、Python 龍爭虎斗!PHP 屹立不倒!
●??腳本之家粉絲福利,請查看!
●??經典算法題 :兩個大數相乘(華為面試)
●?微軟勸你別再使用 IE 瀏覽器
●?最具潛力的編程語言GO有新書啦!
小貼士返回 上一級 搜索“Java?女程序員?大數據?留言送書?運維?算法?Chrome?黑客?Python?JavaScript?人工智能?女朋友?MySQL?書籍?等關鍵詞獲取相關文章推薦。
總結
以上是生活随笔為你收集整理的fragment在activity中的静态和动态用法_使用Matlab修改压缩Gif动态图片制作微信表情...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cobbler基础安装
- 下一篇: K3 WISE,销售订单新增批号并能携带