當前位置:首頁 » 文件管理 » 圖片壓縮代碼

圖片壓縮代碼

發布時間: 2022-05-18 14:23:25

1. PNG格式圖片怎麼壓縮到最小

用這個在線圖片壓縮工具吧,你想把圖片文件的大小減到多少都行,比如你的200kb的照片,你直接設置壓縮到100K,它馬上瞬間就能壓縮到100K。而且頂多也就一兩秒鍾搞定。在線智能壓縮圖片大小,圖片壓縮體積寬高,大圖縮小

▼ 在線圖片智能壓縮使用步驟:

一、首先點擊加號添加需要壓縮的圖片。目前已知支持對jpg、png等多種常見的圖片格式進行壓縮,如果上傳圖片並壓縮成功,則代表支持該圖片格式。
二、可以自行修改圖片需要被壓縮到的最大寬高尺寸,默認為圖片原始的寬高尺寸,且寬高比例是自動鎖定的。
三、必須設置圖片被壓縮後,期望輸出的圖片文件的最大佔用空間。(必填項)
四、選擇圖片生成的演算法。默認為混合優先演算法,絕大多數情況下使用默認演算法即可。
五、壓縮的設定值不能小於1Kb,但圖片壓縮的最終效果可以小於1Kb。

2. html5怎麼壓縮圖片

利用canvas的drawImage方法來繪制圖片,並且設置繪制的圖片的width跟height,最後再通過canvas的toDataURL方法來生成壓縮後的dataUR

下面直接上代碼:

html:

[html]view plain

  • <divclass="head_imgpr">

  • <emclass="pa"></em>

  • <imgsrc='../images/icon_touxiang.png'alt=""class="modify_img"/>

  • <inputid="photo"type="file"accept="image/*"/>

  • </div>

3. 如何把圖片壓縮成指定大小

你可以用這種在線的圖片壓縮工具,就可以把圖片文件壓縮到你期望的體積大小,比如你將壓縮數值設置到100kb,稍等幾秒鍾之後,在線圖片壓縮工具就已經把圖片的文件大小壓縮到最高100kb了。換句話說,你設定壓縮到多少kb的期望值,他壓縮完的輸出圖片就是多少kb大小了,非常方便。在線智能圖片壓縮,壓縮圖片體積大小

在線圖片智能壓縮使用步驟:

一、首先點擊加號添加需要壓縮的圖片。目前已知支持對jpg、png、webp、bmp等多種常見的圖片格式進行壓縮,如果選擇圖片後正常顯示並能夠壓縮成功,則代表支持該圖片格式。
二、可以自行修改圖片需要被壓縮到的最大寬高尺寸,默認為圖片原始的寬高尺寸,並且寬高比例是自動鎖定的,確保圖片不會變形。
三、必須設置圖片被壓縮後,期望輸出的壓縮之後圖片文件的最大佔用空間,該選項是必填的。
四、選擇圖片壓縮的演算法。默認為智能混合壓縮演算法,絕大多數情況下使用默認演算法進行圖片壓縮即可。
五、當你設置壓縮後的大小單位為」Kb「時,壓縮大小的設定值不能小於1Kb,但圖片壓縮後的最終文件大小是可以小於1Kb的。

4. 怎樣把圖片做成壓縮包

詳細步驟如下:

1.如下圖所示,文件夾里有四張照片

(4)圖片壓縮代碼擴展閱讀:

壓縮包的作用:

1、節省磁碟空間;

2、可以把多個文件壓縮成一個壓縮包,此功能在發送郵件時用處比較大,因為郵件附件多個文件通常要一個個的上傳,把多個文件壓縮成一個壓縮包後就可以完成一次上傳了;

3、可以把一個大文件分解壓縮成多個小壓縮包,此功能在文件拷貝中作用比較大,比如所你有個300M的文件需要拷貝到別的電腦中,而你的U盤只有256M,這時候你就可以用壓縮軟體把文件分成兩個150M的壓縮包然後分別拷貝就行了;

4、此外部分軟體如WinRAR可以實現對文件的壓縮保密保護,就是在形成壓縮包的時候添加解壓密碼,這樣生成的壓縮包別人沒有密碼是無法打開的,可以起到一定的文件保密作用。

5. 電腦里的照片如何壓縮

具體方法有這些:

方法一

1.如果你的圖片格式是PNG格式的,而且對圖片質量要求不高,可以使用下面的方法來壓縮圖片大小。

拓展資料:

壓縮文件的基本原理是查找文件內的重復位元組,並建立一個相同位元組的"詞典"文件,並用一個代碼表示,比如在文件里有幾處有一個相同的詞"中華人民共和國"用一個代碼表示並寫入"詞典"文件,這樣就可以達到縮小文件的目的。

由於計算機處理的信息是以二進制數的形式表示的,因此壓縮軟體就是把二進制信息中相同的字元串以特殊字元標記來達到壓縮的目的。為了有助於理解文件壓縮,請在腦海里想像一幅藍天白雲的圖片。對於成千上萬單調重復的藍色像點而言,與其一個一個定義"藍、藍、藍……"長長的一串顏色,還不如告訴電腦:"從這個位置開始存儲1117個藍色像點"來得簡潔,而且還能大大節約存儲空間。

這是一個非常簡單的圖像壓縮的例子。其實,所有的計算機文件歸根結底都是以"1"和"0"的形式存儲的,和藍色像點一樣,只要通過合理的數學計算公式,文件的體積都能夠被大大壓縮以達到"數據無損稠密"的效果。

總的來說,壓縮可以分為有損和無損壓縮兩種。如果丟失個別的數據不會造成太大的影響,這時忽略它們是個好主意,這就是有損壓縮。有損壓縮廣泛應用於動畫、聲音和圖像文件中,典型的代表就是影碟文件格式mpeg、音樂文件格式mp3和圖像文件格式jpg。但是更多情況下壓縮數據必須准確無誤,人們便設計出了無損壓縮格式,比如常見的zip、rar等。

壓縮軟體(compression software)自然就是利用壓縮原理壓縮數據的工具,壓縮後所生成的文件稱為壓縮包(archive),體積只有原來的幾分之一甚至更小。當然,壓縮包已經是另一種文件格式了,如果想使用其中的數據,首先得用壓縮軟體把數據還原,這個過程稱作解壓縮。常見的壓縮軟體有winzip、winrar等。

6. png圖片怎麼通過代碼實現壓縮到指定的文件大小,比如5M壓縮到200KB,比如用pngquant或imageMagick

先用命令行形式進行 PNG 壓縮。

1,下載 windows安裝包 或者 mac 和 linux 版本的安裝包。

2,命令行輸入 pngquant 就可以使用了;

3,為了使用方便,可以配置環境變數(後面如果和 picom 集成在了一起再去掉 )。

快速使用 pngquant
pngquant 圖片名稱.png
對於一些可選參數的說明:

1,--skip-if-larger pngquant 有時候壓縮的文件會比源文件大。這個選項會判斷,如果大就取消執行。強烈建議加上

2,--quality 0-100 圖片質量。對於顏色沒有特別要求的可以縮減到 10, 但是越小壓縮率越低,通常不需要設置。

3,--force 強制執行,pngquant 會判斷,如果有一個已經壓縮的同名文件在當前文件夾,就不會執行。這個選項會覆蓋原來的文件。

4,--output file 指定輸入文件的名稱。 可以指定為 jpg 格式,但是圖片不會變得更小。

5,--speed 執行速度

使用 subprocess 調用 pngquant 命令行
對應的程序:

import subprocess
subprocess.run('pngquant elephant.png')
如果想獲取程序運行時屏幕上顯示的內容,可以使用 check_output 方法,在這里不需要。

接下來使用 subprocess 封裝對應的壓縮函數:

def pngquant_compress(fp, force=False, quality=None):
"""壓縮函數.

參數:
fp: 文件名稱
force: 如果存在同名文件,是否覆蓋
quality: 壓縮質量。 10-40, or 10
"""
force_command = '-f' if force else ''

quality_command = ''
if quality and isinstance(quality, int):
quality_command = f'--quality {quality}'
if quality and isinstance(quality, str):
quality_command = f'--quality {quality}'

command = f'pngquant {fp} --skip-if-larger {force_command} {quality_command}'
subprocess.run(command)

if __name__ == "__main__":
pngquant_compress('elephant.png

7. python中PLE調整圖片大小,等比例壓縮文件,怎麼寫代碼

How do I read image data from a URL in Python?

importosimportImagefileName='c:/py/jb51.jpg'fp=open(fileName,'rb')im=Image.open(fp)fp.close()x,y=im.sizeifx <300or y <300:os.remove(fileName)

from PIL import Imageimport requestsimport numpy as npfrom StringIO import StringIOresponse = requests.get(url)img = np.array(Image.open(StringIO(response.content)))

from PIL import Imageimport urllib2

im = Image.open(urllib2.urlopen(url))

or if you userequests:

from PIL import Imageimport requests

im = Image.open(requests.get(url, stream=True).raw)

[python] view plain

  • [html] view plain

  • #coding:utf-8

  • '''

  • python圖片處理

  • '''

  • importImageasimage

  • #等比例壓縮圖片

  • defresizeImg(**args):

  • args_key={'ori_img':'','dst_img':'','dst_w':'','dst_h':'','save_q':75}

  • arg={}

  • forkeyinargs_key:

  • ifkeyinargs:

  • arg[key]=args[key]

  • im=image.open(arg['ori_img'])

  • ori_w,ori_h=im.size

  • widthRatio=heightRatio=None

  • ratio=1

  • if(ori_wandori_w>arg['dst_w'])or(ori_handori_h>arg['dst_h']):

  • ifarg['dst_w']andori_w>arg['dst_w']:

  • widthRatio=float(arg['dst_w'])/ori_w#正確獲取小數的方式

  • ifarg['dst_h']andori_h>arg['dst_h']:

  • heightRatio=float(arg['dst_h'])/ori_h

  • ifwidthRatioandheightRatio:

  • ifwidthRatio<heightRatio:

  • ratio=widthRatio

  • else:

  • ratio=heightRatio

  • ifwidthRatioandnotheightRatio:

  • ratio=widthRatio

  • ifheightRatioandnotwidthRatio:

  • ratio=heightRatio

  • newWidth=int(ori_w*ratio)

  • newHeight=int(ori_h*ratio)

  • else:

  • newWidth=ori_w

  • newHeight=ori_h

  • im.resize((newWidth,newHeight),image.ANTIALIAS).save(arg['dst_img'],quality=arg['save_q'])

  • '''

  • image.ANTIALIAS還有如下值:

  • NEAREST:usenearestneighbour

  • BILINEAR:

  • BICUBIC:

  • ANTIALIAS:bestdown-sizingfilter

  • '''

  • #裁剪壓縮圖片

  • defclipResizeImg(**args):

  • args_key={'ori_img':'','dst_img':'','dst_w':'','dst_h':'','save_q':75}

  • arg={}

  • forkeyinargs_key:

  • ifkeyinargs:

  • arg[key]=args[key]

  • im=image.open(arg['ori_img'])

  • ori_w,ori_h=im.size

  • dst_scale=float(arg['dst_h'])/arg['dst_w']#目標高寬比

  • ori_scale=float(ori_h)/ori_w#原高寬比

  • ifori_scale>=dst_scale:

  • #過高

  • width=ori_w

  • height=int(width*dst_scale)

  • x=0

  • y=(ori_h-height)/3

  • else:

  • #過寬

  • height=ori_h

  • width=int(height*dst_scale)

  • x=(ori_w-width)/2

  • y=0

  • #裁剪

  • box=(x,y,width+x,height+y)

  • #這里的參數可以這么認為:從某圖的(x,y)坐標開始截,截到(width+x,height+y)坐標

  • #所包圍的圖像,crop方法與php中的image方法大為不一樣

  • newIm=im.crop(box)

  • im=None

  • #壓縮

  • ratio=float(arg['dst_w'])/width

  • newWidth=int(width*ratio)

  • newHeight=int(height*ratio)

  • newIm.resize((newWidth,newHeight),image.ANTIALIAS).save(arg['dst_img'],quality=arg['save_q'])

  • #水印(這里僅為圖片水印)

  • defwaterMark(**args):

  • args_key={'ori_img':'','dst_img':'','mark_img':'','water_opt':''}

  • arg={}

  • forkeyinargs_key:

  • ifkeyinargs:

  • arg[key]=args[key]

  • im=image.open(arg['ori_img'])

  • ori_w,ori_h=im.size

  • mark_im=image.open(arg['mark_img'])

  • mark_w,mark_h=mark_im.size

  • option={'leftup':(0,0),'rightup':(ori_w-mark_w,0),'leftlow':(0,ori_h-mark_h),

  • 'rightlow':(ori_w-mark_w,ori_h-mark_h)

  • }

  • im.paste(mark_im,option[arg['water_opt']],mark_im.convert('RGBA'))

  • im.save(arg['dst_img'])

  • #Demon

  • #源圖片

  • ori_img='D:/tt.jpg'

  • #水印標

  • mark_img='D:/mark.png'

  • #水印位置(右下)

  • water_opt='rightlow'

  • #目標圖片

  • dst_img='D:/python_2.jpg'

  • #目標圖片大小

  • dst_w=94

  • dst_h=94

  • #保存的圖片質量

  • save_q=35

  • #裁剪壓縮

  • clipResizeImg(ori_img=ori_img,dst_img=dst_img,dst_w=dst_w,dst_h=dst_h,save_q=save_q)

  • #等比例壓縮

  • #resizeImg(ori_img=ori_img,dst_img=dst_img,dst_w=dst_w,dst_h=dst_h,save_q=save_q)

  • #水印

  • #waterMark(ori_img=ori_img,dst_img=dst_img,mark_img=mark_img,water_opt=water_opt)



8. PHP等比例壓縮圖片的實例代碼

具體代碼如下所示:
/**
*
desription
壓縮圖片
*
@param
sting
$imgsrc
圖片路徑
*
@param
string
$imgdst
壓縮後保存路徑
*/
public
function
compressedImage($imgsrc,
$imgdst)
{
list($width,
$height,
$type)
=
getimagesize($imgsrc);
$new_width
=
$width;//壓縮後的圖片寬
$new_height
=
$height;//壓縮後的圖片高
if($width
>=
600){
$per
=
600
/
$width;//計算比例
$new_width
=
$width
*
$per;
$new_height
=
$height
*
$per;
}
switch
($type)
{
case
1:
$giftype
=
check_gifcartoon($imgsrc);
if
($giftype)
{
header('Content-Type:image/gif');
$image_wp
=
imagecreatetruecolor($new_width,
$new_height);
$image
=
imagecreatefromgif($imgsrc);
imageresampled($image_wp,
$image,
0,
0,
0,
0,
$new_width,
$new_height,
$width,
$height);
//90代表的是質量、壓縮圖片容量大小
imagejpeg($image_wp,
$imgdst,
90);
imagedestroy($image_wp);
imagedestroy($image);
}
break;
case
2:
header('Content-Type:image/jpeg');
$image_wp
=
imagecreatetruecolor($new_width,
$new_height);
$image
=
imagecreatefromjpeg($imgsrc);
imageresampled($image_wp,
$image,
0,
0,
0,
0,
$new_width,
$new_height,
$width,
$height);
//90代表的是質量、壓縮圖片容量大小
imagejpeg($image_wp,
$imgdst,
90);
imagedestroy($image_wp);
imagedestroy($image);
break;
case
3:
header('Content-Type:image/png');
$image_wp
=
imagecreatetruecolor($new_width,
$new_height);
$image
=
imagecreatefrompng($imgsrc);
imageresampled($image_wp,
$image,
0,
0,
0,
0,
$new_width,
$new_height,
$width,
$height);
//90代表的是質量、壓縮圖片容量大小
imagejpeg($image_wp,
$imgdst,
90);
imagedestroy($image_wp);
imagedestroy($image);
break;
}
}
總結
以上所述是小編給大家介紹的PHP等比例壓縮圖片的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
您可能感興趣的文章:php中10個不同等級壓縮優化圖片操作示例PHP
實現等比壓縮圖片尺寸和大小實例代碼php
gd等比例縮放壓縮圖片函數基於PHP實現等比壓縮圖片大小php上傳圖片並壓縮的實現方法PHP實現圖片上傳並壓縮PHP實現圖片壓縮的兩則實例php使用imagick模塊實現圖片縮放、裁剪、壓縮示例

9. android 圖片質量壓縮和尺寸壓縮有什麼區別

這個方法用來將特定格式的壓縮圖片寫入輸出流(OutputStream)中,當然例如輸出流與文件聯系在一起,壓縮後的圖片也就是一個文件。如果壓縮成功則返回true,其中有三個參數:

format是壓縮後的圖片的格式,可取值:Bitmap.CompressFormat .JPEG、~.PNG、~.WEBP。

quality的取值范圍為[0,100],值越小,經過壓縮後圖片失真越嚴重,當然圖片文件也會越小。(PNG格式的圖片會忽略這個值的設定)

stream指定壓縮的圖片輸出的地方,比如某文件。

上述方法還有一個值得注意的地方是:當用BitmapFactory decode文件時可能返回一個跟原圖片不同位深的圖片,或者丟失了每個像素的透明值(alpha),比如說,JPEG格式的圖片僅僅支持不透明的像素。文章android圖片壓縮在文末提到的下面這點可能就是這個原因:

當調用bitmap.compress(CompressFormat.JPEG, 100, fos);保存為圖片時發現圖片背景為黑色,如下圖:

下面是質量壓縮的代碼:

(Bitmapbmp,Filefile){

ByteArrayOutputStreambaos=newByteArrayOutputStream();

intoptions=80;//個人喜歡從80開始,

bmp.compress(Bitmap.CompressFormat.JPEG,options,baos);

while(baos.toByteArray().length/1024>100){

baos.reset();

options-=10;

bmp.compress(Bitmap.CompressFormat.JPEG,options,baos);

}

try{

FileOutputStreamfos=newFileOutputStream(file);

fos.write(baos.toByteArray());

fos.flush();

fos.close();

}catch(Exceptione){

e.printStackTrace();

}

}

這段代碼來自Android圖片壓縮總結,我根據自己的需求改了改,但是大同小異,所以就直接貼了。

隨著代碼中的option逐漸變小,我們可以在logcat中列印baos的大小來查看圖片的大小。我們也可以去掉while的循環條件,一直壓縮下去看效果,最終一張照片可能就由原來的3、4M變成了幾百K甚至幾百B了。我在試的過程中將option設置成100,壓縮後偶爾會出現一張3、4M的圖片經過壓縮後竟變成了6、7M,這里還是有點困惑,不知道為什麼。

隨後,我想把這個壓縮後的圖片(1、200KB)填充到ImageView中時卻失敗了,logcat中提示圖片過大!這就是文章開頭提到的問題,雖然我們通過質量壓縮使File形式的圖片文件縮小了,但是並沒有改變圖片的寬高,原先是1080*1920解析度的圖片經壓縮後還是1080*1920,而File格式轉換成Bitmap格式進入到內存中時,內存是根據圖片的像素數量來給圖片分配內存大小的,還是有好幾M,因此填充ImageView失敗。

順便提一下,可以用bitmap.getByteCount()獲取存儲bitmap像素的內存大小,但是KITKAT(Android 4.4版本)以後用getAllocateByteCount()獲取。一般情況下,後者返回值比前者大,比如,當bitmap被重用去decode另外更小的bitmaps時,或者被人為地配置一下屬性值,比如setWidth()、setHeight()、reconfigure()時,如果bitmap不做以上操作,二者的返回值應該是一樣的。(譯文,不太懂)

二、尺寸壓縮

特點: 通過設置采樣率, 減少圖片的像素, 達到對內存中的Bitmap進行壓縮



我們主要通過BitmapFactory中的decodeFile方法對圖片進行尺寸壓縮:

publicstaticBitmapdecodeFile(StringpathName,BitmapFactory.Optionsopts)

public static Bitmap decodeFile (String pathName, BitmapFactory.Options opts)

其中有兩個參數:

pathName是圖片文件的路徑。

opts 就是所謂的采樣率,它里邊有很多屬性可以設置,我們通過設置屬性來達到根據自己的需要,壓縮出指定的圖片。其中比較常用的屬性有:

booleaninJustDecodeBounds—— 如果設置為true,則只讀取bitmap的寬高,而忽略內容。

intinSampleSize—— 如果>1,調用decodeFile方法後,就會得到一個更小的bitmap對象(已壓縮)。比如設置為2,那麼新Bitmap的寬高都會是原Bitmap寬高的1/2,總體大小自然就是原來的1/4了,以此類推。

booleaninPurgeable—— 如果設置為true,壓縮後的圖片像素占的內存將會在系統清理內存的時候被回收掉,當像素的信息再次被用到時將會自動重新decode該像素(比如getPixels()時)。(慎用!重復decode可以會造成UI的卡頓,API level 21 已棄用)

booleaninInputShareable—— 與inPurgeable配合使用,如果inPurgeable設置成false,自動忽略此值,如果inPurgeable為true,此值決定是否該bitmap能分享引用給輸入數據(inputstream,array等),或者必須進行深拷貝。API level 21 已棄用。(這是譯文,不太理解!!!)

下面是一段實現的代碼

privateBitmapsizeCompres(Stringpath,intrqsW,intrqsH){

//用option設置返回的bitmap對象的一些屬性參數

finalBitmapFactory.Optionsoptions=newBitmapFactory.Options();

options.inJustDecodeBounds=true;//設置僅讀取Bitmap的寬高而不讀取內容

BitmapFactory.decodeFile(path,options);//獲取到圖片的寬高,放在option里邊

finalintheight=options.outHeight;//圖片的高度放在option里的outHeight屬性中

finalintwidth=options.outWidth;

intinSampleSize=1;

if(rqsW==0||rqsH==0){

options.inSampleSize=1;

}elseif(height>rqsH||width>rqsW){

finalintheightRatio=Math.round((float)height/(float)rqsH);

finalintwidthRatio=Math.round((float)width/(float)rqsW);

inSampleSize=heightRatio<widthRatio?heightRatio:widthRatio;

options.inSampleSize=inSampleSize;

}

returnBitmapFactory.decodeFile(path,options);//主要通過option里的inSampleSize對原圖片進行按比例壓縮

}

private Bitmap sizeCompres(String path, int rqsW, int rqsH) {

// 用option設置返回的bitmap對象的一些屬性參數

final BitmapFactory.Options options = new BitmapFactory.Options();

options.inJustDecodeBounds = true;// 設置僅讀取Bitmap的寬高而不讀取內容

BitmapFactory.decodeFile(path, options);// 獲取到圖片的寬高,放在option里邊

final int height = options.outHeight;//圖片的高度放在option里的outHeight屬性中

final int width = options.outWidth;

int inSampleSize = 1;

if (rqsW == 0 || rqsH == 0) {

options.inSampleSize = 1;

} else if (height > rqsH || width > rqsW) {

final int heightRatio = Math.round((float) height / (float) rqsH);

final int widthRatio = Math.round((float) width / (float) rqsW);

inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;

options.inSampleSize = inSampleSize;

}

return BitmapFactory.decodeFile(path, options);// 主要通過option里的inSampleSize對原圖片進行按比例壓縮

}

上面就是簡單的質量壓縮與尺寸壓縮。

熱點內容
魔獸世界自動釣魚腳本 發布:2024-05-19 06:43:07 瀏覽:494
cbs加密 發布:2024-05-19 06:29:56 瀏覽:200
ssis存儲過程 發布:2024-05-19 06:21:31 瀏覽:630
怎樣刪除小視頻文件夾 發布:2024-05-19 05:49:29 瀏覽:589
開啟php短標簽 發布:2024-05-19 05:44:12 瀏覽:473
android各國語言 發布:2024-05-19 05:42:54 瀏覽:247
微信什麼資料都沒怎麼找回密碼 發布:2024-05-19 05:35:34 瀏覽:907
填志願密碼是什麼 發布:2024-05-19 05:30:23 瀏覽:318
城堡爭霸自動掠奪腳本 發布:2024-05-19 05:22:06 瀏覽:204
asp編程工具 發布:2024-05-19 05:20:36 瀏覽:143