Войти

Показать полную графическую версию : [решено] System.Drawing2D при изменение размера изображения получается полупрозрачный край


Vandheer
25-02-2021, 13:43
Привет. При изменении размера изображения средствами System.Drawing.Drawing2D на выходе у изображения получается полупрозрачный край в толщину в 1 пиксель. Как не допустить появления этой кромки?

https://i.qpix.com/2021/02/25/A0c6.jpg

Черновик кода:
[Reflection.Assembly]::LoadFrom( (Resolve-Path (".\TagLibSharp.dll"))) | Out-Null


$Song = [TagLib.File]::Create((resolve-path ".\input\Moon Lights.flac"))
[TagLib.IPicture[]]$Pictures = $Song.Tag.Pictures

$bmp = New-Object IO.MemoryStream

$targetSize = 1280
$Quality= 100

$img = [System.Drawing.Image]::FromStream([IO.MemoryStream]$Pictures[0].Data.data)

$CanvasWidth = $targetSize
$CanvasHeight = $targetSize

#Encoder parameter for image quality
$EncoderParam = [System.Drawing.Imaging.Encoder]::Quality
$EncoderParamSet = New-Object System.Drawing.Imaging.EncoderParameters(1)
$EncoderParamSet.Param[0] = New-Object System.Drawing.Imaging.EncoderParameter($EncoderParam, $Quality)


# get codec
$Codec = [System.Drawing.Imaging.ImageCodecInfo]::GetImageEncoders() | Where{$_.MimeType -eq 'image/jpeg'}

#compute the final ratio to use
$ratioX = $CanvasWidth / $img.Width;
$ratioY = $CanvasHeight / $img.Height;

$ratio = $ratioY
if ($ratioX -le $ratioY) {
$ratio = $ratioX
}

$newWidth = [int] ($img.Width * $ratio)
$newHeight = [int] ($img.Height * $ratio)

$bmpResized = New-Object System.Drawing.Bitmap($newWidth, $newHeight)
$graph = [System.Drawing.Graphics]::FromImage($bmpResized)
$graph.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::HighQualityBicubic

$graph.Clear([System.Drawing.Color]::White)
$graph.DrawImage($img, 0, 0, $newWidth, $newHeight)

#save to file
$bmpResized.Save($bmp, $Codec, $EncoderParamSet)

$bmpResized.Dispose()
$img.Dispose()

$byte_vec = New-Object -TypeName TagLib.ByteVector -ArgumentList $bmp.ToArray()
$picture = New-Object -TypeName TagLib.Picture -ArgumentList $byte_vec

$Pictures[0]=$picture

$song.Tag.Pictures=$Pictures

$song.Save()




© OSzone.net 2001-2012