asp.net - 将图像转换为流

标签 asp.net image amazon-s3 image-resizing imageresizer

我正在使用一个函数来上传图像,获取流并使用 imageresizer.net 调整它的大小,然后将流上传到 Amazon S3。

现在我想拍摄本 map 片并将其转换为流。 (调整大小并上传到 amazonS3)。基本上,您如何将图像转换为流。

这可能是一个简单的问题,只是在任何地方都找不到答案。

这是一些基本的代码。

Public Shared Sub MoveToAmazon(strImg As String, SKU As String)
        Dim fullImg As String = "C:\ImageLocation\" & strImg
        Dim img As Image = Image.FromFile(fullImg)

        'Here Im missing the code to convert it to a stream.
        UploadImage(imgStream, SKU)  

End Sub


Public Shared Sub UploadImage(imgStream As Stream, imgName As String)

    Dim MainStream As Stream = New MemoryStream
    Dim HomeStream As Stream = New MemoryStream
    Dim SmallStream As Stream = New MemoryStream
    Dim TinyStream As Stream = New MemoryStream
    Dim MidStream As Stream = New MemoryStream
    Dim GridStream As Stream = New MemoryStream
    Dim ListStream As Stream = New MemoryStream


    Dim c As New ImageResizer.Configuration.Config

    Dim SourceImage As Bitmap = New Bitmap(imgStream)
    Dim SourceMain As Bitmap = New Bitmap(SourceImage)
    Dim SourceHome As Bitmap = New Bitmap(SourceImage)
    Dim SourceSmall As Bitmap = New Bitmap(SourceImage)
    Dim SourceTiny As Bitmap = New Bitmap(SourceImage)
    Dim SourceMid As Bitmap = New Bitmap(SourceImage)
    Dim SourceGrid As Bitmap = New Bitmap(SourceImage)
    Dim SourceList As Bitmap = New Bitmap(SourceImage)

    ImageResizer.ImageBuilder.Current.Build(SourceMain, MainStream, New ResizeSettings("width=300&height=372&scale=both&paddingWidth=40")) 'ProductPage
    ImageResizer.ImageBuilder.Current.Build(SourceHome, HomeStream, New ResizeSettings("width=112&height=147&scale=both")) 'HomePage Products
    ImageResizer.ImageBuilder.Current.Build(SourceGrid, GridStream, New ResizeSettings("width=149&height=149&scale=both")) 'Categories Grid
    ImageResizer.ImageBuilder.Current.Build(SourceList, ListStream, New ResizeSettings("width=171&height=206&scale=both")) 'Categories List
    ImageResizer.ImageBuilder.Current.Build(SourceSmall, SmallStream, New ResizeSettings("width=64&height=75&scale=both")) 'Accessories
    ImageResizer.ImageBuilder.Current.Build(SourceTiny, TinyStream, New ResizeSettings("width=82&height=82&scale=both")) 'Cart
    ImageResizer.ImageBuilder.Current.Build(SourceMid, MidStream, New ResizeSettings("width=155&height=116&scale=both")) 'CategoryMain


    AmazonUploadFile("OriginalImages/" & imgName, imgStream)
    AmazonUploadFile("MainImages/" & imgName, MainStream)
    AmazonUploadFile("HomeImages/" & imgName, HomeStream)
    AmazonUploadFile("GridImages/" & imgName, GridStream)
    AmazonUploadFile("ListImages/" & imgName, ListStream)
    AmazonUploadFile("SmallImages/" & imgName, SmallStream)
    AmazonUploadFile("TinyImages/" & imgName, TinyStream)
    AmazonUploadFile("MidImages/" & imgName, MidStream)
End Sub

Public Shared Sub AmazonUploadFile(S3Key As String, FileStream As Stream)
    Dim request As New PutObjectRequest()
    request.WithBucketName(BUCKET_NAME)
    request.WithKey(S3Key).InputStream = FileStream
    request.WithCannedACL(S3CannedACL.PublicRead)
    GetS3Client.PutObject(request)
End Sub

最佳答案

[免责声明 - 我是 ImageResizing.NET library 的作者OP 正在问这个问题。]

伙计们 - 如果可以避免的话,不要使用 Bitmap 和 Image 实例。有a giant list of pitfalls这将使您的服务器崩溃。不要使用 System.Drawing 中没有服务器安全包装器的任何内容。

@dash - 除了内存泄漏之外,您的代码几乎是正确的。

安全地解码和编码图像并不简单。让 ImageResizing.Net 库处理它。

Dim settings as New ResizeSettings("width=64&height=75&scale=both")
Using ms As New MemoryStream()
    ImageBuilder.Current.Build("C:\ImageLocation\" & strImg, ms, settings)
    ms.Seek(0, SeekOrigin.Begin) 
    UploadImage(ms, SKU)
End Using

如果您制作多个版本,切勿将某些内容加载到位图或图像实例中。将文件克隆到 MemoryStream 中。
Using fs as New FileStream(...)
  Using ms as MemoryStream = Util.StreamUtils.CopyStream(fs)
     'For loop here with your setting variations
     ms.Seek(0, SeekOrigin.Begin)
     'Place upload and resize code here
     'End Loop
  End Using
End Using

关于asp.net - 将图像转换为流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9944935/

相关文章:

css - ASP :TextBox convert into bootstrap <input>

html - 在网络中显示苹果 heif 图像

amazon-web-services - NoCredentialProviders : no valid providers in chain error in electron-updater with AWS S3

python - 如何在 Google App Engine 中使用 Python(和 boto)通过浏览器从 Amazon S3 下载文件?

.net - 遗留代码、遗留工具——怎么办?

c# - Remove() 不适用于多对多关系(ASP.NET、lambda 表达式)

c# - 关闭记录集后是否必须处理 SqlCommand?

java - 在特定位置将一张图像添加/覆盖到另一张图像?

java - Android使用getExternalFilesDir保存图片不一致

amazon-web-services - AWS : Cloudformation script create S3 bucket for CloudTrail based on conditionals