haijie1223 发表于 2012-3-22 14:12:05

图片格式转化质量如何调节[已解决]

本帖最后由 haijie1223 于 2012-3-22 15:11 编辑

#include <GDIPlus.au3>
Local $bmpfile,$jpgfile
$bmpfile="test.bmp"
$jpgfile="test.jpg"
_BMP2JPG($bmpfile, $jpgfile)

Func _BMP2JPG($bmp, $jpg)
Local $hImage, $CLSID
_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($bmp)
$CLSID = _GDIPlus_EncodersGetCLSID("JPG");图片质量失真较大
;~ $CLSID = _GDIPlus_EncodersGetCLSID("BMP");失真很小
_GDIPlus_ImageSaveToFileEx($hImage, $jpg, $CLSID)
_GDIPlus_Shutdown()
EndFunc ;==>_BMP2JPG


如题:发现把图片格式转化过程中,如果图片转码类型为JPG时,图片质量失真较大,如果用BMP转码类型,失真就很小。
请看代码测试,请问这是为何?
我试过添加质量控制:$tData = DllStructCreate("int Quality")
        DllStructSetData($tData, "Quality", 100)
        $tParams = _GDIPlus_ParamInit(1)
        _GDIPlus_ParamAdd($tParams, 100, 1, $GDIP_EPTLONG, DllStructGetPtr($tData, "Quality"))
        _GDIPlus_ImageSaveToFileEx($hImage, @ScriptDir & "\test.jpg", $sCLSID, DllStructGetPtr($tParams))没有作用。
请高手指点一下,如何添加质量控制?使得在转化过程中能自由控制质量失真度。

afan 发表于 2012-3-22 14:45:17

我那个水纹效果的帖子里有#include <GDIPlus.au3>

_Pic2jpg('test.bmp', 'testj.jpg')

Func _Pic2jpg($sFileName, $oFileName, $iQuality = 100)
        ;Afan提示:转换任意格式图片为jpg格式,可设置$iQuality质量参数,0-100
        ;成功返回True;失败返回False,并设置@Error = 1
        _GDIPlus_Startup()
        Local $hImage = _GDIPlus_ImageLoadFromFile($sFileName)
        If $iQuality < 0 Then $iQuality = 0
        If $iQuality > 100 Then $iQuality = 100
        Local $giQuality = $iQuality, $pParams
        Local $tParams = _GDIPlus_ParamInit(1)
        Local $tData = DllStructCreate('int Quality')
        DllStructSetData($tData, 'Quality', $giQuality)
        _GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, DllStructGetPtr($tData))
        If IsDllStruct($tParams) Then $pParams = DllStructGetPtr($tParams)
        Local $CLSID = _GDIPlus_EncodersGetCLSID('JPG')
        Local $save = _GDIPlus_ImageSaveToFileEx($hImage, $oFileName, $CLSID, $pParams)
        _GDIPlus_Shutdown() ;清理 GDI+ 使用的资源
        If $save = False Then Return SetError(1, 0, False)
        Return True
EndFunc   ;==>_Pic2jpg

user3000 发表于 2012-3-22 15:01:46

嗯, 水纹? 那个妹子很清纯啊...
一定不能错过...这么好的图片!

haijie1223 发表于 2012-3-22 15:04:48

回复 2# afan


    A版,好像没有效果。我提供的附件里面有bmp文件。
你可以测试一下,用JPG和BMP转码得到的图片质量差好多!


这张图上的效果,能看出差距来吗?

haijie1223 发表于 2012-3-22 15:07:26

$iQuality 参数是有效的,但是JPG转码比BMP转码的效果要差好多

afan 发表于 2012-3-22 15:10:34

$iQuality 参数是有效的,但是JPG转码比BMP转码的效果要差好多
haijie1223 发表于 2012-3-22 15:07 http://www.autoitx.com/images/common/back.gif


    格式不同啊,不然分什么格式…

haijie1223 发表于 2012-3-22 15:11:33

回复 6# afan


    哦 是这样 谢谢A版

afan 发表于 2012-3-22 15:13:10

回复 7# haijie1223


    bmp 是无损的,jpg之类都是有损压缩的,但体积一般都比 bmp 小很多

seniors 发表于 2012-3-22 16:35:42

回复 8# afan
bmp可以是32位的,而JPG是24位的,网上看到过32位的,不知道怎么制作

afan 发表于 2012-3-22 16:40:15

回复 9# seniors


    你都不知道那就很少有Au3论坛的人知道了

9922250 发表于 2012-6-9 07:07:13

回复 10# afan


    期待出现 转BMP格式

xiaoqiangdai 发表于 2012-12-21 14:07:18

谢谢楼主分享
页: [1]
查看完整版本: 图片格式转化质量如何调节[已解决]