リモートサーバーにある自分のサーバーでイメージのサイズを変更しています。これは完全に機能しますが、一部の画像では完全に間違ってサイズ変更されます。異なるDPIを使用したASP.NETイメージのサイズ変更
しかし、例えば、このイメージを、ひどく動作し、本当に小さなされて終わる:それは最初の画像は72ピクセル/インチを持ってい判明 http://www.topwedding.com/bigimage/Wedding%20Dresses/HS01116007/Floral-One-Shoulder-Organza-over-Satin-A-Line-Bridal-Gown-with-Pick-Ups.jpg
検査の際に第2の画像は951ピクセル/インチである。
悪いサイズ変更は私が前にいたのと同じ問題でした(hereを参照)
しかし、私は他のポストで提案されているようにそれが今、私のコードでPixelWidth
とPixelHeight
プロパティを使用することによって解決したと思いました。
目的は、200ピクセル幅のサムネイルを製品概要ページに表示することです。イメージのサイズが同じになるようにするにはどうすればよいですか?
完全なコードは、以下である:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
ResizeAndSaveFast(200, 200, "http://www.topwedding.com/bigimage/Wedding%20Dresses/HSTSKN510/Strapless-Mermaid-Appliqued-Wedding-Dress-with-Ruched-Bodice-and-Pick-Up-Skirt.jpg", Server.MapPath("images\") + "1.png")
ResizeAndSaveFast(200, 200, "http://www.topwedding.com/bigimage/Wedding%20Dresses/HS01116007/Floral-One-Shoulder-Organza-over-Satin-A-Line-Bridal-Gown-with-Pick-Ups.jpg", Server.MapPath("images\") + "2.png")
End Sub
Private Function ResizeAndSaveFast(ByVal maxWidth As Integer, ByVal maxHeight As Integer, ByVal imageURL As String, ByVal saveToPath As String) As Boolean
Dim imgRequest As WebRequest = WebRequest.Create(imageURL)
Dim imgResponse As WebResponse
imgResponse = imgRequest.GetResponse()
Dim streamPhoto As Stream = imgResponse.GetResponseStream()
Dim memStream As New MemoryStream
streamPhoto.CopyTo(memStream)
memStream.Position = 0
Dim bfPhoto As BitmapFrame = ReadBitmapFrame(memStream)
Dim newWidth, newHeight As Integer
Dim scaleFactor As Double
newWidth = bfPhoto.PixelWidth
newHeight = bfPhoto.PixelHeight
If bfPhoto.PixelWidth > maxWidth Or bfPhoto.PixelHeight > maxHeight Then
If bfPhoto.PixelWidth > maxWidth Then
scaleFactor = maxWidth/bfPhoto.PixelWidth
newWidth = Math.Round(bfPhoto.Width * scaleFactor, 0)
newHeight = Math.Round(bfPhoto.Height * scaleFactor, 0)
End If
If newHeight > maxHeight Then
scaleFactor = maxHeight/newHeight
newWidth = Math.Round(newWidth * scaleFactor, 0)
newHeight = Math.Round(newHeight * scaleFactor, 0)
End If
End If
Dim bfResize As BitmapFrame = FastResize(bfPhoto, newWidth, newHeight)
If bfResize Is Nothing Then Return False
Dim baResize As Byte() = ToByteArray(bfResize)
File.WriteAllBytes(saveToPath, baResize)
Return True
End Function
Arghh:あなただけ
bfPhoto.PixelWidth
とbfPhoto.PixelHeight
を使用し、またサムネイルのサイズが指定された最大の幅と高さを超えないことを確認する次のコードを試すことができますこのようなものを逃す...ありがとう! – Floあなたは大歓迎です。 :-) – ConnorsFan