最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Image scaling in IE 11, 10, and 9 is terrible - Stack Overflow

programmeradmin12浏览0评论

Before you say this is an existing question, or that all I need to use is ms-interpolation-mode, or that I just need to have a pre-scaled version of the image on the server and serve that up, read the question. Please. None of those are appropriate.

I have an app that draws a very large image using the HTML5 canvas in the browser on all modern browsers. I pull an image out of that canvas and display it (shrunk down considerably in size on-screen). The scaled down image looks fine on Chrome, Firefox, Safari, or Opera whether Windows or Mac. IE however looks very terrible, even though I'm not testing this on old versions of IE (like IE 7 where the ms-interpolation-mode works), but only on IE 9, 10, and 11.

Why are they not smoothly scaling down the image? I thought later versions of IE could do this?

Here's a screenshot of my image saved off as a PNG file and loaded up in IE 11. Note that it's broken even if all I'm doing is looking at the PNG. My software and my web page are completely out of the picture here. This is just IE 11 showing a PNG file.

Am I going to have to do some kind of resizing in the canvas just to make a reduced size version for IE because they can't handle image scaling that every other browser on the market handles with ease? Is there nothing I can turn on via CSS to make this look better?

Here's a direct link to one of the generated images: .png. Show me how to make this look good in a significantly smaller (say 0.25x) size in a page for IE 9, 10, and 11.

Before you say this is an existing question, or that all I need to use is ms-interpolation-mode, or that I just need to have a pre-scaled version of the image on the server and serve that up, read the question. Please. None of those are appropriate.

I have an app that draws a very large image using the HTML5 canvas in the browser on all modern browsers. I pull an image out of that canvas and display it (shrunk down considerably in size on-screen). The scaled down image looks fine on Chrome, Firefox, Safari, or Opera whether Windows or Mac. IE however looks very terrible, even though I'm not testing this on old versions of IE (like IE 7 where the ms-interpolation-mode works), but only on IE 9, 10, and 11.

Why are they not smoothly scaling down the image? I thought later versions of IE could do this?

Here's a screenshot of my image saved off as a PNG file and loaded up in IE 11. Note that it's broken even if all I'm doing is looking at the PNG. My software and my web page are completely out of the picture here. This is just IE 11 showing a PNG file.

Am I going to have to do some kind of resizing in the canvas just to make a reduced size version for IE because they can't handle image scaling that every other browser on the market handles with ease? Is there nothing I can turn on via CSS to make this look better?

Here's a direct link to one of the generated images: https://i.sstatic.net/chIaY.png. Show me how to make this look good in a significantly smaller (say 0.25x) size in a page for IE 9, 10, and 11.

Share Improve this question edited Mar 9, 2014 at 18:50 John Munsch asked Mar 9, 2014 at 18:07 John MunschJohn Munsch 19.5k8 gold badges44 silver badges74 bronze badges 17
  • 2 What mechanism are you using for scaling? What happens if you draw it at full scale in IE? Have you tried drawing at full scale and setting a canvas scaling factor? – Ted Hopp Commented Mar 9, 2014 at 18:10
  • 1 Are you showing it by using its data URL as the source of an <img> tag, and then constraining the size of the image with CSS? (Asking for clarification.) And how is it getting to the <canvas> in the first place? edit oh wait never mind about the last part. – Pointy Commented Mar 9, 2014 at 18:12
  • 2 Regarding the ng-src attribute: are you using angular.js? Per this thread, Angular has special treatment for MSIE browsers. Perhaps that's the source of the behavior you're seeing. – Ted Hopp Commented Mar 9, 2014 at 18:28
  • 2 It's caused by by the reason as here: stackoverflow.com/questions/17861447/… – user1693593 Commented Mar 9, 2014 at 18:41
  • 2 I have succeded in making your terrible display crossbrowser : try #img { -webkit-transform: scale(0.21) translateZ(1px); -webkit-transform-origin: top left; transform: scale(0.21) translateZ(1px); transform-origin: top left; } (and remove the dimension in the img itself). It will fail in IE, FF and Chrome . May be that gives somebody a clue ... – vals Commented Mar 10, 2014 at 19:24
 |  Show 12 more comments

3 Answers 3

Reset to default 6

There seems to be two questions. The first is about downscaled <img> and the second is about downscaling image in canvas. The first happens only on IE but the later happens to other browsers too.

You are doing well, but you can clarify your question more next time; both has been answered on SO and each has different solutions.

For <img>, as discussed in other answers there is nothing you can do, except to provide a properly downscaled image.

For canvas, the question boils down to downscale quality with drawImage, and has already been answered: HTML5 Canvas Resize (Downscale) Image High Quality?

Here is a sample, using the algorithm in that answer, that produce a nicely scaled image on IE 11:

<!DOCTYPE html><meta charset="utf-8"/>
<img width='2550' height='3300' src='T9wgHSo.png' />
<script> 'use strict';
var img = document.getElementsByTagName('img')[0];
document.body.appendChild( downScaleImage( img, 0.1 ) );
img.parentNode.removeChild( img );

function downScaleImage(img, scale) { /* Please copy code from the other answer */ }
function downScaleCanvas(cv, scale) { /* Please copy code from the other answer */ }

Why are they not smoothly scaling down the image? Well because Internet Explorer simply does not support a smooth form of interpolation any more. It was indeed supported in earlier versions of Internet Explorer (version 7) by using ms-interpolation-mode.

Newer versions of IE do not support this. It is a very frustrating IE issue and cannot be solved by CSS.

The only options you have is to divert to alternatives (downscale it on the server or obey Microsoft and use Silverlight... ;-) ).

Hate to say it but the only true solution is to just live with it.

After encountering the same problem myself, I found this Crossbrowser-Bicubic-Image-Interpolation script. I tested it on my Win7 virtual machine in IE11 and it works.

After downloading the .zip you can open the demo.html file to see how to apply the script. Notice on line 26 of that HTML file there is jQuery code that targets only images with the class "first":

$('img.first').bicubicImgInterpolation({

But you can remove ".first" to make it target all images:

$('img').bicubicImgInterpolation({

So that's all you need. jquery.js, bicubicInterpolation.js, and the <script> that calls the function.

These items in the <head> tag are probably a good idea to include too:

<!-- enable canvas for old versions of IE -->
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="edit-Type" edit="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
发布评论

评论列表(0)

  1. 暂无评论