2、Linux
检测是否为progressive jpeg : identify -verbose filename.jpg | grep
Interlace(如果输出 None 说明不是progressive jpeg;如果输出 Plane 说明是 progressive
jpeg。)
将basic jpeg转换成progressive jpeg:> convert infile.jpg -interlace Plane outfile.jpg
3、PHP
使用imageinterlace和imagejpeg函数我们可以轻松解决转换问题。
<?php
$im = imagecreatefromjpeg( 'pic.jpg' );
imageinterlace( $im , 1);
imagejpeg( $im , './php_interlaced.jpg' , 100);
imagedestroy( $im );
?>
|
4、Python
import PIL
from exceptions import IOError
img = PIL.Image. open ( "c:\\users\\biaodianfu\\pictures\\in.jpg" )
destination = "c:\\users\\biaodianfu\\pictures\\test.jpeg"
try :
img.save(destination, "JPEG" , quality = 80 , optimize = True , progressive = True )
except IOError:
PIL.ImageFile.MAXBLOCK = img.size[ 0 ] * img.size[ 1 ]
img.save(destination, "JPEG" , quality = 80 , optimize = True , progressive = True )
|
5、jpegtran
jpegtran -copy none -progressive <inputfile> <outputfile>
6、C#
using (Image source = Image.FromFile( @"D:\temp\test2.jpg" )) {
ImageCodecInfo codec = ImageCodecInfo.GetImageEncoders().First(c => c.MimeType == "image/jpeg" );
EncoderParameters parameters = new EncoderParameters(3);
parameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
parameters.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.ScanMethod, ( int )EncoderValue.ScanMethodInterlaced);
parameters.Param[2] = new EncoderParameter(System.Drawing.Imaging.Encoder.RenderMethod, ( int )EncoderValue.RenderProgressive);
source.Save( @"D:\temp\saved.jpg" , codec, parameters);
}
|
|