Frage

Der Versuch, auf dem Netz 300dpi tif Bilder für die Anzeige zu verwenden. Im Moment, wenn der Benutzer ein Bild hochgeladen, erschaffe ich dynamisch eine Miniaturansicht. Wenn eine Seite erstellt verweist auf das hochauflösendes Bild mit einer Breite von 500x500px, kann ich die gleiche Funktionalität zu einem gif / jpg on the fly zu konvertieren. Was ist die bevorstehende Auflösung des jpg, die erstellt werden würde?

EDIT:

Um die Nutzung zu erklären, die Börse 300dpi Bilder, die ca. 3000x3000 Pixel sind. Der Benutzer verwendet diese Bilder eine Katalog-Seite zu erstellen, die für PDF-Druck verwendet werden. Wenn sie die Seite erstellen, brauchen wir nur 72 dpi Bilder auf dem Bildschirm angezeigt werden, aber für den Druck, müssen die 300dpi-Bilder. Offensichtlich wollen sie nicht ein 3000x3000px Bild auf der Seite hinzuzufügen, so muss es auf den richtigen Anzeigebereich der Größe verändert werden, z.B. 500x500px usw.

War es hilfreich?

Lösung

Dies läuft darauf hinaus, ein einfaches Bild Resize nach unten. Die Diskussion von Pulverinhalatoren ist nur Zusatzdaten den Skalierungsfaktor zu berechnen.

Wie @Guffa sagte, Sie sollten zum Zeitpunkt des Uploads dies tun, so dass Sie nur statische Bilder dienen können in Ihrem Betrachter.

Dies wird eine Last auf dem Server sein:

  1. Laden Sie das vollständige Bild. Dies wird etwa 27 MB Speicher für Ihre 3000x3000 Bilder sein.
  2. Ändern der Größe. Gibt es jede Menge Mathematik träge gemacht (noch viel CPU-Kapazität).
  3. Komprimieren. Mehr CPU + Kosten zu Ihrem Laufwerk zu schreiben.

Da Sie bereits die Zeit nehmen, eine Miniaturansicht zu generieren, können Sie diese Kosten amortisieren und diese Kosten durch nicht Schritt 1 oben wiederholen zu müssen (den Code sehen).

Nachdem ein Bild uplaoded ist, würde ich empfehlen, einen Thread Ausgründung diese Arbeit zu tun. Es ist eine Last auf dem Webserver sicher, aber Sie sind nur andere Option ist eine zweite Maschine zur Durchführung der Arbeit zu widmen. Es wird schließlich durchgeführt werden.

Hier ist ein Code, den Job zu tun. Die wichtigsten Linien sind diese:

OutputAsJpeg(Resize(big, 300.0, 72.0), new FileStream("ScreenView.jpg"));
OutputAsJpeg(Resize(big, bigSize, 64.0), new FileStream("Thumbnail.jpg"));

Wir können die big Bild die Größe neu aber wir brauchen. In der ersten Zeile nach unten skalieren wir es nur durch eine feste Skala (72,0 / 300,0). In der zweiten Zeile, zwingen wir das Bild um eine endgültige max Dimension von 64 zu haben (Skalierungsfaktor = 64,0 / 3000,0).

using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.IO;

BitmapSource Resize(BitmapSource original,
                    double originalScale,
                    double newScale) {
    double s = newScale / originalScale;
    return new TransformedBitmap(original, new ScaleTransform(s, s));
}

void OutputAsJpeg(BitmapSource src, Stream out) {
    var encoder = new JpegBitmapEncoder();
    encoder.Frames.Add(BitmapFrame.Create(src));
    encoder.Save(out);
}

// Load up your bitmap from the file system or whatever,
// then dump it out to a smaller version and a thumbnail.
// Assumes thumbnails have a max dimension of 64
BitmapSource big = new BitmapImage(new Uri("BigPage0.png",
                                           UriKind. RelativeOrAbsolute));
double bigSize = Math.Max(big.PixelWidth, big.PixelHeight);
OutputAsJpeg(Resize(big, 300.0, 72.0), new FileStream("ScreenView.jpg"));
OutputAsJpeg(Resize(big, bigSize, 64.0), new FileStream("Thumbnail.jpg"));

Andere Tipps

Wenn ich verstehe, was Sie wollen - Sie versuchen, eine GIF- oder JPG-Miniaturansicht einer sehr hohen Auflösung tif zu machen, für Web-Display - wenn nicht, ich entschuldige mich im Voraus ....


Wenn Sie das Miniaturbild wollen 500x500px sein, ist, dass die Auflösung des jpg / gif möchten Sie erstellen - 500x500 oder mindestens 500x <500 oder <500x500 (in der Box zu passen, es sei denn, Sie wollen verzerrt Bilder).

Für die Anzeige im Web, wird der DPI keine Rolle. Verwenden Sie einfach die Pixel-Auflösung direkt möchten.

Technisch die JPG / GIF ist bei 72-DPI durch die Bild Klassen in .NET erstellt. Aber die DPI wirklich keine Bedeutung für den Browser hat -. Sie benutzen nur die Maße 500x500

Wenn auf einer Webseite ein Bild angezeigt wird, die dpi (oder richtige ppi) Einstellung irrelevant ist. Es ist nur die Größe in Pixeln, die relevant ist.

Sie können ein Bild on the fly konvertieren, aber es ist sehr arbeitsintensiv für den Server, dass jedes Mal zu tun, wird das Bild angezeigt. Sie sollten die Größen erstellen, die Sie benötigen, wenn der Benutzer das Bild hochgeladen wurde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top