Привет. При изменении размера изображения средствами System.Drawing.Drawing2D на выходе у изображения получается полупрозрачный край в толщину в 1 пиксель. Как не допустить появления этой кромки?
Черновик кода:
Код:
[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()