代码之家  ›  专栏  ›  技术社区  ›  Vnuk

.net在IE和FF中生成损坏的JPEG

  •  3
  • Vnuk  · 技术社区  · 15 年前

    这让我发疯了,所以。。。

    将图像大小调整为小缩略图时,IE和FF无法完整显示生成的图像。Opera正确显示图像,windows图像预览也正确显示。

         final_image = New System.Drawing.Bitmap(92, 110)
         graphic = System.Drawing.Graphics.FromImage(final_image)
         graphic.FillRectangle(New System.Drawing.SolidBrush(System.Drawing.Color.White), New System.Drawing.Rectangle(0, 0, 92, 110))
         graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
         graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality
         graphic.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality
         graphic.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality
         graphic.DrawImage(original_image, 0, 0, 92, 110)
    
         Dim info() As Drawing.Imaging.ImageCodecInfo = Drawing.Imaging.ImageCodecInfo.GetImageEncoders()
         Dim encoderParameters As Drawing.Imaging.EncoderParameters
         encoderParameters = New Drawing.Imaging.EncoderParameters(1)
         encoderParameters.Param(0) = New Drawing.Imaging.EncoderParameter(Drawing.Imaging.Encoder.Quality, 100L)
    

    结果是:

    This image should be missing it's lower 1/6 in FF3 and IE6/7 http://incito.hr/e387103c-b12f-4324-ac2d-a836e65a6bad-92x110.jpg

    如果您的浏览器正确显示上面的图像(来自FF3的屏幕截图):

    Screen capture from FF3 http://incito.hr/Clipboard02.png

    但是,如果我将缩略图大小增加到126x150-在所有浏览器中,一切正常:

    Same image resized by the same code to 126x150 http://incito.hr/4d51a5cd-621e-4709-b24a-ebb8f9da54dd-126x150.jpg

    3 回复  |  直到 13 年前
        1
  •  3
  •   Assaf Lavie    15 年前

    这可能与图像末尾的EOI标记有关。

    有一次类似的事情发生在我身上,我模糊地记得在JPG的末尾添加一个EOI字节就解决了这个问题。

    我建议你搜索一下 wiki page

        2
  •  0
  •   Daniel Earwicker    15 年前

    也许你需要打电话 Flush Graphics 例如:

    graphic.Flush();
    

    完成所有绘图操作后,在从位图发出流之前执行此操作。

        3
  •  0
  •   terR0Q    15 年前

    这取决于绘图上下文,可能需要调用Save或Flush方法来解决,正如Earwicker上面所说的。