Größenänderung / Zuschneiden / Auffüllen eines Bildes auf eine feste Größe

8

Ich muss ein Bild auf eine feste Größe skalieren. Aber es muss die Faktoren zwischen der Breite und der Höhe beibehalten.

Angenommen, ich möchte ein Bild von 238 (w) X 182 (h) auf 210 / 150

skalieren

Was ich jetzt mache ist:

%Vor%

Jetzt nehme ich den kleinsten Faktor.

Jetzt habe ich immer die richtige Breite seit 238 / 1.333333 = 210 . Aber die Höhe ist immer noch 160 .

Wie bekomme ich die Höhe auf 160 herunter, ohne das Bild zu ruinieren?

Muss ich zuschneiden? Wenn ja wie?

    
sanders 14.04.2009, 11:15
quelle

11 Antworten

22

Diese Lösung ist im Grunde die gleiche wie die von Can Berk Güder, aber nachdem ich einige Zeit damit verbracht habe, zu schreiben und zu kommentieren, hatte ich das Gefühl zu posten.

Diese Funktion erstellt ein Miniaturbild, das genau so groß ist wie die Größe, die Sie ihm geben. Das Bild wird so skaliert, dass es der Größe des Miniaturbildes am besten entspricht. Wenn es nicht genau in beide Richtungen passt, ist es im Thumnail zentriert. Umfangreiche Kommentare erklären das Treiben.

%Vor%

Beispielverwendung:

%Vor%     
gnud 14.04.2009, 12:21
quelle
10

Dies schneidet das Bild nicht frei, sondern lässt bei Bedarf Platz um das neue Bild, was meiner Meinung nach beim Erstellen von Thumbnails besser ist (als das Zuschneiden).

%Vor%     
Can Berk Güder 14.04.2009 11:35
quelle
2

Hast du Imagick ? Wenn ja, kannst du das Bild laden und so etwas wie thumbnailimage()

Dort können Sie einen der Parameter (Höhe oder Breite) überspringen und die Größe wird korrekt angepasst.

    
Ólafur Waage 14.04.2009 11:22
quelle
2

Vielleicht werfen Sie einen Blick auf PHPThumb (es funktioniert mit GD und ImageMagick)

    
TheHippo 14.04.2009 11:27
quelle
2

Nur ein Tipp für qualitativ hochwertige schnelle Thumbnail-Generierung aus großen Bildern: ( aus dem php. Internetsite )

Wenn Sie die Thumbnail-Generierung in zwei Stufen durchführen:

  1. Vom Original bis zu einem Zwischenbild mit der doppelten endgültigen Größe und einer schnellen Größenanpassung
  2. Vom Zwischenbild bis zum fertigen Thumbnail mit einer qualitativ hochwertigen Resample

Dann kann das viel schneller sein; Die Größenänderung in Schritt 1 ist relativ schlecht für die Größe, hat aber genug zusätzliche Auflösung, dass in Schritt 2 die Qualität annehmbar ist und das Zwischenbild klein genug ist, um die qualitativ hochwertige Resample zu erstellen (was bei einer 2: 1-Skalierung gut funktioniert). geht sehr schnell.

    
Jason S 14.04.2009 14:20
quelle
1

Ich würde eher die Größe ändern, so dass das Bild innerhalb Ihres Limits enthalten ist, und dann die leeren Teile ausfüllen. Also im obigen Beispiel würden Sie die Größe ändern, so dass die Höhe OK ist, dann füllen Sie (7 Pixel an jedem Ende, denke ich) nach links und rechts mit einer Hintergrundfarbe.

    
Ickmund 14.04.2009 11:36
quelle
1

Die Größenänderung von Bildern aus einer von PHP stammenden Webseite kann problematisch sein. Größere Bilder (annähernd 2 + MB auf der Festplatte) können so groß sein, dass sie mehr als 32 MB Speicher zur Verarbeitung benötigen.

Aus diesem Grund tendiere ich dazu entweder von einem CLI-basierten Skript mit bis zu 128 MB Arbeitsspeicher oder einer Standardbefehlszeile, die auch so viel verwendet, wie sie benötigt.

%Vor%

'convert' ist Teil der ImageMagick-Befehlszeilenwerkzeuge.

    
Alister Bulman 14.04.2009 11:38
quelle
1

sind diese Thumbnails? Wenn ja, ist das Zuschneiden kein großes Problem. Wir machen es die ganze Zeit. ich scheue mich nicht davor, willkürliche Verhältnisse in verkrüppelte quadratische Thumbnails zu zerlegen, das Bild komplett zu vermasseln (ja, ich bin das hardcore ), wenn es einfach gut aussieht. Dies ist eine Designer Antwort auf eine technische Frage, aber immer noch. Fürchte dich nicht vor der Ernte!

    
stefs 14.04.2009 11:56
quelle
1

Ich denke, es gibt ein wenig Verwirrung .. Wenn Sie nur die Größe ändern und das ursprüngliche Verhältnis beibehalten möchten, ist die richtige Operation:

%Vor%

Sonst, wenn die vorangestellte newWidth und newHeight nicht geändert werden können und das Daumenverhältnis sich vom ursprünglichen Verhältnis unterscheidet, können Sie den Daumen nur zuschneiden oder Ränder hinzufügen.

Wenn Sie den Schnitt machen wollen, kann Ihnen diese Funktion helfen (ich habe vor Jahren in 5 Minuten geschrieben, vielleicht brauchen Sie etwas Verbesserung .. es funktioniert nur mit jpg, zum Beispiel;):

%Vor%     
Strae 14.04.2009 12:17
quelle
1

Die Technik besteht darin:

  1. Skalieren Sie das Bild so, dass eine Dimension übereinstimmt, während die andere die gewünschten Dimensionen überschreitet
  2. nimm das Bild in der gewünschten Größe aus der Mitte des skalierten Bildes heraus.

Wenn Sie sich nicht sicher sind, wie Sie die Größenanpassungsfunktion ausführen sollen, denken Sie daran, dass, wenn die Anteile von Quell- und Zielbildern gleich sind, diese Beziehung gilt:

%Vor%

Wenn Sie drei Parameter kennen, können Sie die vierte leicht berechnen.

Ich habe einen Artikel dazu geschrieben:
Crop -To-Fit ein Bild mit ASP / PHP

    
Salman A 18.04.2009 04:18
quelle
0

Sie müssen 5 Pixel oben und unten zuschneiden, um zu Ihrer Zielgröße zu gelangen, dies könnte jedoch das Bild ruinieren.

Eigentlich sollten Sie eine Zielbreite oder -höhe haben und dann die andere Dimension um die gleiche Proportion anpassen.

    
cjk 14.04.2009 11:30
quelle

Tags und Links