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
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?
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%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% 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.
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:
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.
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.
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.
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!
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%Die Technik besteht darin:
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