1

我有一个文件存储在我网站的目录中。当我尝试使用 image.fromfile 访问该文件时,会抛出一个异常,指出该文件不存在。但是,当我使用完全相同的路径访问完全相同的文件但将其加载到图像控件中时,图像会完美加载以验证它是否存在。

抛出文件未找到异常的代码是:

Private Sub btnCombine_Click(sender As Object, e As EventArgs) Handles btnCombine.Click
    Dim BMCanvas As Bitmap     'the "canvas" to draw on
    Dim BackgroundTemplate As Image     'the background image


    Dim img1Overlay As Bitmap   'the character image

    BackgroundTemplate = Image.FromFile("~/Account/Images/Blue 1-02.jpg")   'Template Background Image
    img1Overlay = Image.FromStream(FileUpload1.FileContent)  'First overlay image

    BMCanvas = New Bitmap(500, 647)    'new canvas
    Using g As Graphics = Graphics.FromImage(BMCanvas)
        g.DrawImage(BackgroundTemplate, 0, 0, 500, 647)  'Fill the convas with the background image
        g.DrawImage(img1Overlay, 50, 50, 100, 100)  'Insert the overlay image onto the background image
    End Using

    'Setup a path to the destination for the composite image
    Dim folderPath As String = Server.MapPath("~/OutFiles/")

    'Create a directory to store the composite image if it does not already exist.
    If Not Directory.Exists(folderPath) Then
        'If Directory (Folder) does not exists Create it.
        Directory.CreateDirectory(folderPath)
    End If

    'Temporarily save the file as jpeg.
    BMCanvas.Save(folderPath & "Temp1.jpg", Imaging.ImageFormat.Jpeg)


    'View the resulting composite image in image control.
    Image1.ImageUrl = folderPath & "Temp1.jpg"

    BMCanvas.Dispose()
End Sub

验证图像实际上在目录中并成功显示图像的代码是:

Private Sub cboRole_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboRole.SelectedIndexChanged
    If cboRole.SelectedIndex = 1 Then
        Image1.ImageUrl = "~/Account/Images/Blue 1-02.jpg"
    End If
End Sub

我无法弄清楚为什么一种方式有效而另一种方式无效。

我也尝试了以下代码但没有成功:

    'Another way to read the image files
    Image = File.ReadAllBytes(Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "~/Account/Images/Blue 1-02.jpg")))
4

2 回答 2

1

好的,您问题的第二部分(“为什么它与 ImageUrl 一起工作?”)的答案位于文档中

引用:

使用 ImageUrl 属性指定要在 Image 控件中显示的图像的 URL。您可以使用相对或绝对 URL。相对 URL 将图像的位置与网页的位置相关联,而无需指定服务器上的完整路径。路径是相对于网页位置的。这样可以更轻松地将整个站点移动到服务器上的另一个目录,而无需更新代码。绝对 URL 提供完整路径,因此将站点移动到另一个目录需要您更新代码。

它(图像控件)已经嵌入了“映射”相对于您的网页文件夹的路径的功能。

在代码中使用路径时,没有控件,例如在 Image.FromFile 中,您需要使用Server.MapPath确保正确映射路径

正如您在代码中为目录创建所做的那样。

于 2019-10-21T18:30:01.850 回答
0

您不能从相对 url 获得图像。要将您的图像作为 System.Drawing.Image 您需要从这样的物理路径中获取它们(在您的情况下)

 Dim image As System.Drawing.Image = System.Drawing.Image.FromFile(HttpContext.Current.Request.PhysicalApplicationPath & "\Account\Images\Blue 1-02.jpg") 'Server.MapPath("~/Account/Images/Blue 1-02.jpg")) 
于 2019-10-22T08:49:16.533 回答