日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

fragment在activity中的静态和动态用法_使用Matlab修改压缩Gif动态图片制作微信表情...

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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动态图片制作微信表情...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。