將jpg壓縮成webp格式的圖片


cwebp
名稱

cwebp -壓縮圖像文件為的WebP文件
概要

cwebp [選項] INPUT_FILE -o output_file.webp
描述

cwebp壓縮使用的WebP格式的圖像。輸入格式可以是PNG,JPEG,TIFF的WebP或生在Y'CbCr樣品。
選項

基本的選項是:

-o串

指定輸出的WebP文件的名稱。如果省略,cwebp將進行壓縮,但只報告統計數據。使用“ - ”作為輸出名稱將直接輸出到“標准輸出”。
- 字符串

顯式地指定輸入文件。如果輸入的文件與啟動此選項很有用“ - ”號實例。此選項必須出現最后。任何其他選項以后將被忽略。
-h,-help

一個簡短的使用說明。
-H,-longhelp

所有可能的選項的摘要。
-版

打印的版本號(如major.minor.revision)並退出。
-q浮動

指定之間RGB通道的壓縮系數0和100。默認值是75。

在有損壓縮(默認)的情況下,一個小的因子產生具有較低質量的更小的文件。最好的質量是通過使用一個值達到100。

在無損壓縮(由指定的情況下-lossless選項),一個小的因子能更快的壓縮速度,但產生較大的文件。最大壓縮是通過使用一個值達到100。
-alpha_q INT

指定之間阿爾法壓縮的壓縮系數0和 100。阿爾法無損壓縮是使用的值達到100,而較低的值導致一個有損壓縮。默認值是 100。
-f INT

指定去塊效應濾波器的實力,與0(無過濾)和100(最大濾波)。值為0將關閉任何過濾。較高的值將增加圖像解碼之后施加的濾波處理的強度。該值越高,畫面將出現在更順暢。典型值通常的范圍20至50。
-PRESET串

指定一組預先定義的參數,以適應特定類型的源材料。可能的值有:默認情況下,照片,圖片, 繪圖,圖標,文本。

由於-PRESET覆蓋其他參數值(除-q 之一),這個選項最好先出現在參數的順序。
-sns INT

指定空間噪聲整形的幅度。空間噪聲整形(或簡稱為SNS)是指用於決定該圖像的區域應使用相對較少的位的內置算法的一般集合,並且其中別的更好傳送這些比特。可能的范圍內變為 0(算法是關閉的)到100(最大效果)。默認值是 80。
-m INT

指定要使用的壓縮方法。此參數控制了編碼速度和壓縮文件大小和質量之間的平衡。可能值的范圍從0到6。默認值為4。當使用較高的值,編碼器將花費更多的時間檢查額外的編碼可能性,並決定質量增益。較低的值可能會導致在較大的文件大小和較低的壓縮質量為代價更快的處理時間。
-jpeg_like

改變內部參數映射,以更好地匹配JPEG壓縮的預期大小。這個標志通常會產生類似大小的輸出文件以它的JPEG當量(對於相同-q設置),但具有更少視覺失真。
-公噸

如果可能的話使用多線程編碼。與透明通道源使用有損壓縮時,此選項才有效。
-記憶不足

通過保存壓縮后大小的四倍(典型值)減少有損編碼的內存使用情況。這將使得在編碼慢和輸出的大小和失真略有不同。此標志僅方法3和建立有效的,並且默認是關閉的。注意,離開這個標志關閉將對比特流一些副作用:它迫使某些位流的功能,如分區(強制的號碼1)。需要注意的是比特流大小的更詳細的報告是由打印cwebp使用此選項時。
-af

開啟自動過濾。這個算法將花費額外的時間優化濾波強度以達到良好的平衡質量。

其他選項

更高級的選項有:

-sharpness INT

指定過濾的銳度(如果使用的話)。范圍為0(銳度)到7(最銳利)。默認值為0。
-strong

使用強過濾(如過濾被用來感謝-f 選項)。強大的過濾功能默認是開啟的。
-nostrong

禁用強濾波(如果濾波被用來感謝-f 選項),並使用簡單的過濾來代替。
-segments INT

改變的分區數的SNS算法的分割過程中使用。段應在范圍1至4。默認值為4。此選項對方法第3及以上沒有影響,除非-low_memory使用。
-partition_limit INT

通過限制由一些宏塊中使用的比特數降低質量。范圍為0(無降解,默認值)到100(完全降解)。有用的數值通常大約是30 - 70中度高畫質圖像。在VP8格式中,所謂的控制分區具有512K的一個限制,用於存儲以下信息:該宏塊是否被跳過,它所屬的段,它是否被編碼為內4×4或內16×16模式,並且最后的預測模式,以用於每個子塊。對於一個非常大的圖象,512k的僅留下了空間,以每16×16宏塊少的比特。絕對最小是每宏塊4位。跳過,段,和模式信息最多可以使用幾乎所有的這些4位(雖然殼體是不大可能的),這對於非常大的圖像問題。所述partition_limit因子控制的頻率最比特昂貴模式(內4×4)將被使用。這是有用的情況下達到了512K限制,並顯示以下信息:錯誤代碼:6(PARTITION0_OVERFLOW:分區#0太大,以適應512K)。如果使用 -partition_limit不足以滿足512k的約束,應該以每宏塊節省更多的頭比特使用更少的段。見-segments選項。
-size INT

指定目標大小(以字節為單位),以試圖達到的壓縮輸出。壓縮機將進行部分編碼的幾通,以獲得盡可能接近這一目標。
-psnr浮動

指定目標PSNR(單位為dB),試圖達到的壓縮輸出。壓縮機將進行部分編碼的幾通,以獲得盡可能接近這一目標。
-pass INT

設置的推移選項一起使用二分法期間使用的最大數量 -size或-psnr。最大值是10。
調整大小寬高

調整源與大小的矩形寬度點¯x 高度。如果(但不是兩者)的寬度或高度的參數是0,值將保持縱橫比來計算。
-crop x_position y_position寬度高度

裁剪源在坐標與左上角的矩形(x_position,y_position),大小寬點¯x 高度。這復種面積必須在源矩形中完全包含。
-s寬度高度

指定輸入文件實際上是由繼ITU-R BT.601推薦生在Y'CbCr樣品,在4:2:0線性格式。亮度平面大小為寬點¯x 高度。
-Map INT

輸出附加ASCII地圖編碼信息。可能映射值的范圍是1至6。這只是為了幫助調試。
-pre INT

指定一些預處理步驟。使用值2將觸發RGBA-在質量相關的偽隨機抖動> YUVA轉換(僅適用於有損壓縮)。
-alpha_filter串

    指定阿爾法飛機的預測濾波方法。一個 沒有,快或最好,在日益復雜和緩慢秩序。默認為快。在內部,阿爾法過濾是使用四種可能的預測(無,水平,垂直梯度)進行。的最佳 模式將嘗試依次在每個模式並挑選一個這使較小的大小。在快速模式將只是試圖形成一個先驗的猜測沒有測試所有的模式。
-alpha_method INT

    指定用於阿爾法壓縮算法:0或1。算法 0表示不壓縮,1使用的WebP無損格式進行壓縮。默認值是1。
-alpha_cleanup

    修改看不見的RGB值下的全透明區域,以幫助壓縮。默認是關閉的。
-blend_alpha INT

    這個選項共混alpha通道(如果存在)用十六進制作為為0xRRGGBB指定背景顏色的來源。Alpha通道之后被重置為不透明值255。
-noalpha

    使用此選項將丟棄Alpha通道。
-lossless

    編碼圖像而沒有任何損失。
-hint串

    指定有關輸入圖像類型的提示。可能的值有:照片, 圖片或圖形。
- 元數據串

    逗號分隔的元數據的列表中,如果存在從輸入復制到輸出。有效值:全部,無,EXIF,ICC,XMP。默認為無。

    請注意,每個輸入格式可能不支持所有組合。
-noasm

    禁用所有組件的優化。
-v

    打印額外的信息(尤其是編碼時間)。
-print_psnr

    計算並報告平均PSNR(峰信噪比)。
-print_ssim

    計算並報告平均SSIM(結構相似度指標,請參閱 http://en.wikipedia.org/wiki/SSIM了解更多詳細信息)。
-print_lsim

    計算並報告當地的相似性指標(最小誤差之和並置的像素鄰居之間)。
-quiet

    不打印任何東西。
例子

cwebp -q 50 -lossless picture.png -o picture_lossless.webp<br>
cwebp -q 70 picture_with_alpha.png -o picture_with_alpha.webp<br>
cwebp -sns 70 -f 50 -size 60000 picture.png -o picture.webp<br>
cwebp -o picture.webp -- ---picture.png


 
標簽: <無>
 

代碼片段(1)[全屏查看所有代碼]

1. [代碼][PHP]代碼     跳至 [1] [全屏預覽]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
<?php
/**
  * Created by PhpStorm.
  * User: liuft
  * Date: 2016/1/22
  * Time: 11:51
  */
 
date_default_timezone_set( 'PRC' );
 
 
/**
  * jpg壓縮成webp格式
  * @param string $dir [webp圖片的存儲路徑]
  * @param int $n [壓縮圖片的張數]
  * @param int $prefix [圖片名稱的后綴]
  * @param int $type [裁剪圖片的類型]
  */
function start_multi_jpg_transform_webp( $dir = '' , $n = 1, $prefix = '_a' , $type = 6)
{
     global $jpg_dir ;
     if (! is_dir ( $dir )) {
         mkdir ( $dir , 0755);
         chmod ( $dir , 0755);
     }
     if ( strrchr ( $jpg_dir , '/' ) != '/' ) {
 
         $jpg_dir = $jpg_dir . '/' ;
     }
     if ( strrchr ( $dir , '/' ) != '/' ) {
 
         $dir = $dir . '/' ;
     }
     for ( $j = 1; $j <= $n ; $j ++) {
         $file_name = $jpg_dir . $j . '.jpg' ; //要裁剪的圖片
         $new_jpg_path = $dir . $j . '_' . $prefix ; //新的圖片路徑
         createImg( $file_name , $new_jpg_path . '.jpg' , $type , 0); //裁剪生成jpg圖片
         //生成webp格式的圖片
         $new_q = 0;
         $m = 0;
         for ( $i = 11; $i <= 18; ++ $i ) {
             $m = $i * 5;
             $m_q = $m / 100; //新的壓縮百分比
             $q = get_img_quality( $new_jpg_path . '.jpg' ); //原圖的質量
             $new_q = $q * $m_q ; //新的圖片質量
             //開始壓縮
             do_jpg_transform_webp( $new_jpg_path . '.jpg' , $new_jpg_path . '_' . $m . '.webp' , $new_q );
         }
     }
}
 
 
/**
  * @param $jpg_file_name_path [jpg圖片的路徑]
  * @param string $new_jpg_filename_path [裁剪后jpg圖片路徑,不設置會將默認的jpg圖片覆蓋]
  * @param bool $type [裁剪圖片類型]
  * @param int $is_compression
  */
function createImg( $jpg_file_name_path , $new_jpg_filename_path = '' , $type = false, $is_compression = 0)
{
     $resource = new Imagick( $jpg_file_name_path );
     if ( $type ) {
         try {
             $size = $resource ->getImageGeometry();
             if ( $size [ 'width' ] > $size [ 'height' ]) {
                 $left = round (( $size [ 'width' ] - $size [ 'height' ]) / 2);
                 $resource ->cropImage( $size [ 'height' ], $size [ 'height' ], $left , 0);
             } else if ( $size [ 'width' ] < $size [ 'height' ]) {
 
                 $top = round (( $size [ 'height' ] - $size [ 'width' ]) / 2);
                 $resource ->cropImage( $size [ 'width' ], $size [ 'width' ], 0, $top );
             }
 
             if ( $type == 1) {
                 $resource ->resizeImage(210, 210, Imagick::FILTER_CATROM, 1.0, true);
             } elseif ( $type == 2) {
                 $resource ->resizeImage(720, 268, Imagick::FILTER_CATROM, 1.0, true);
             } elseif ( $type == 3) {
                 $resource ->resizeImage(298, 198, Imagick::FILTER_CATROM, 1.0, true);
             } elseif ( $type == 4) {
                 $resource ->resizeImage(338, 365, Imagick::FILTER_CATROM, 1.0, true);
             } elseif ( $type == 5) {
                 $resource ->resizeImage(425, 425, Imagick::FILTER_CATROM, 1.0, true);
             } elseif ( $type == 6) {
                 $resource ->resizeImage(150, 150, Imagick::FILTER_CATROM, 1.0, true);
             } elseif ( $type == 7) {
                 $resource ->resizeImage(640, 640, Imagick::FILTER_CATROM, 1.0, true);
             } elseif ( $type == 8) {
                 $resource ->resizeImage(32, 32, Imagick::FILTER_CATROM, 1.0, true);
             }
         } catch (Exception $e ) {
             echo $e ->getMessage();
             exit ;
         }
     }
 
     $resource ->setImageCompression(Imagick::COMPRESSION_JPEG);
     $current = $resource ->getImageCompressionQuality();
     if ( $is_compression ) {
         $resource ->setImageCompressionQuality( $current ); //壓縮質量
     }
     if (! empty ( $new_jpg_filename_path )) {
         $jpg_file_name_path = $new_jpg_filename_path ;
     }
     $resource ->writeImage( $jpg_file_name_path );
     $resource ->clear();
     $resource ->destroy();
 
 
}
 
/**
  * jpg格式轉換成webp格式
  * @param $jpg_img_path [jpg圖片的真實路徑]
  * @param $webp_img_path [webp圖片的真實路徑]
  * @param int $q [圖片的壓縮質量]
  */
function do_jpg_transform_webp( $jpg_img_path , $webp_img_path , $q = 65)
{
     exec ( "cwebp -q {$q} {$jpg_img_path} -o $webp_img_path" );
}
 
 
/**
  * 獲取圖片的質量
  * @param $fileName [圖片的具體路徑]
  * @return int[圖片的質量]
  */
function get_img_quality( $fileName )
{
     $resource = new Imagick( $fileName );
     $resource ->setImageCompression(Imagick::COMPRESSION_JPEG);
     $current = $resource ->getImageCompressionQuality();
     $resource ->clear();
     $resource ->destroy();
     if ( empty ( $current )) {
         $current = 65;
     }
     $resource ->clear();
     $resource ->destroy();
     return $current ;
 
}
 
 
//調用方式
//原始圖片,連續用數字命名 !如 1~10張圖片,就1.jpg~10.jpg
$jpg_dir = './image/' ; //[准備壓縮的jpg圖片路徑,必須設置!]
//壓縮出webp格式的圖片
start_multi_jpg_transform_webp( './webp' , 1, '_a' , 0);
start_multi_jpg_transform_webp( './webp1' , 1, '_a' , 1);
start_multi_jpg_transform_webp( './webp2' , 1, '_a' , 2);
start_multi_jpg_transform_webp( './webp3' , 1, '_a' , 3);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM