2009-06-10 7 views
5

Was ist die beste und schnellste Möglichkeit, um Bilder auf der Client-Seite mit JavaScript zu skalieren?Wie werden skalierte Bilder auf einer Webseite angezeigt, während das Seitenverhältnis beibehalten wird?

EDIT: Sorry, ich meinte die beste Weg, um Anzeige ein Bild auf der Client-Seite der Größe verändert ..

+1

Möchten Sie möglicherweise den Netzwerkverkehr minimieren, wenn der Benutzer ein Bild vom Client hochladen möchte, indem das Bild zuerst verkleinert wird, bevor es an den Server gesendet wird? –

+0

@ Jeffrey: Yup, völlig richtig. Andernfalls ändern Sie einfach die Größe der Serverseite, bevor Sie sie über die Leitung senden. –

+0

@mattt: Eine Reihe von Leuten bot Lösungen an, um das Bild zu vergrößern, bevor es hochgeladen wurde. Haben Sie danach gesucht? (Der aktuelle Text der Frage ist ein wenig unklar, und die Bearbeitung wäre hilfreich). –

Antwort

7

Einfach.

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <title>Client-Side Image Resize (Why?!)</title> 
    <script type="text/javascript"> 
     window.onload = function() { 
     var url = "http://www.google.com/intl/en_ALL/images/logo.gif"; 
     var img = new Image(); 
     img.onload = function() { 
      var w = parseInt((this.width + "").replace(/px/i, ""), 10); 
      var h = parseInt((this.height + "").replace(/px/i, ""), 10); 

      // 50% scale 
      w = (w/2) + "px"; 
      h = (h/2) + "px"; 

      var htmlImg = document.createElement("img"); 
      htmlImg.setAttribute("src", url); 
      htmlImg.setAttribute("width", w); 
      htmlImg.style.width = w; 
      htmlImg.setAttribute("height", h); 
      htmlImg.style.height = h; 
      document.body.appendChild(htmlImg); 
     } 
     img.src = url; 
     } 
    </script> 
    </head> 
    <body> 
    <h1>Look, I'm Resized!</h1> 
    </body> 
</html> 
+2

Gewicht und Höhe bedeutet nicht die Größe des Bildes zu ändern. –

0

Wenn Sie wollen es in einer Erklärung zu tun, dann die Höhe und Breite Eigenschaften am ehesten wäre am besten.

Wenn Sie etwas animiertes möchten, können Sie den Befehl .animate(...) verwenden und die Höhe und Breite als Parameter festlegen. Dadurch sollte das Bild einen weichen Übergang haben.

-2

Bilder sollten immer in der Größe angezeigt werden, in der sie angezeigt werden sollen. Es ist besser, mehrere Kopien auf dem Server zu haben, anstatt eine Datei über das Netzwerk zu kopieren und auf der Client-Seite zu manipulieren. Bedenken Sie:

  • Verschwendung von Netzwerkressource 500x400 Bild zu übertragen, wenn Sie tatsächlich 100X80
  • Ähnliche Abfälle CPU in einigen Imaging API benötigen Sie das Bild auf Client-Seite

Ändern der Größe eines schrumpfen/vergrößern Bild ist nicht einfach Änderung der Höhe/Breite. Wenn Sie eine andere Größe als die ursprüngliche Bildgröße angeben (entweder über Stile, Skripts usw.), verwendet der Browser die native API (z. B. win32 draw), um das Bild richtig zu verkleinern/zu vergrößern. Das Bild beschneiden (Teile des Bildes verlieren) ist einfacher, aber selten erwünscht.

+0

-1 für "immer sollte serviert werden". Die Wiederverwendung des gleichen Bildes in verschiedenen Größen kann nützlich sein, um Bandbreite zu sparen. Wenn Sie Benutzern erlauben, Bilder zu importieren (zum Beispiel in einem Forum), möchten Sie möglicherweise die Größe ändern. – Pool

3

Wenn Sie nicht zu sind durch Flash zu aufschieben, mit flash10 jetzt haben Sie die Wahl der Verarbeitung hochgeladenen Dateien auf der Client-Seite, bevor sie an den Server sendet. Sie können also ein verstecktes/transparentes/kleines Flash-Objekt verwenden, um dem Client das Hochladen des Bildes zu ermöglichen, das Bild flash-skalieren zu lassen (es verfügt über eine gute Bildbearbeitung) und die Byte-Daten an den Server zu senden.

Die As3-Core-Bibliothek hat einen JPEG- und PNG-Encoder, wenn Sie das Bild vor dem Hochladen in beide Formate codieren möchten.

Wenn Sie nicht über Flash haben immer laden Sie den Flex 3 (oder 4) sdk und verwenden FlashDevelop alles gratis tun =)

3

Ändern der Größe, bevor ein sehr mächtiges Werkzeug wäre hochladen. Dies würde die Zeit zum Hochladen von Bildern auf einen Server reduzieren. Oft haben unsere Nutzer 5 Megapixel-Bilder, die von ihren Kameras stammen, und sie haben keine Ahnung, wie sie die Größe mithilfe eines Bildeditors reduzieren können. Was wir hochladen möchten, ist ein 1500 Pixel breites Foto, jpg oder png komprimiert auf weniger als 500 Kbytes.

Dieses Outfit Thin File behauptet, in der Lage zu sein, aber ich habe es noch nicht ausgecheckt. Ich hatte eher gehofft, einen Weg zu finden, JQuery zu verwenden, um dasselbe zu tun.

Verwandte Themen