Dies ist ein .NET Standard-Wrapper für den Bildkomprimierungsdienst TinyPNG.com. Dies ist kein offizielles TinyPNG.com-Produkt.
Byte[]
, Stream
, File
und Url
-APIs verfügbar Installation über Nuget
Install-Package TinyPNG
Über dotnet
installieren
dotnet add package TinyPNG
using var png = new TinyPngClient ( " yourSecretApiKey " ) ;
var result = await png . Compress ( " cat.jpg " ) ;
//URL to your compressed version
result . Output . Url ;
TinyPng
-Namespace befinden. Dadurch wird vermieden, dass zwei verschiedene Namespaces eingeführt werden müssen.CompressFromUrl
-Methode wurde entfernt. Dies ist jetzt über eine neue Überladung für Compress
verfügbar, die ein Uri
-Objekt aufnimmtTinyPng
standardisiert, er war vorher eher eine Art gemischter Fall mit Groß- und Kleinschreibung. Die API hat sich gegenüber V2 geändert. In erster Linie müssen Sie nicht mehr auf jeden einzelnen Schritt der Verwendung der TinyPNG-API warten. Sie können jetzt entsprechende Aufrufe miteinander verketten, da die Erweiterungsmethoden jetzt auf Task<T>
ausgeführt werden.
// create an instance of the TinyPngClient
using var png = new TinyPngClient ( " yourSecretApiKey " ) ;
// Create a task to compress an image.
// this gives you the information about your image as stored by TinyPNG
// they don't give you the actual bits (as you may want to chain this with a resize
// operation without caring for the originally sized image).
var compressImageTask = png . Compress ( " pathToFile or byte array or stream " ) ;
// or `CompressFromUrl` if compressing from a remotely hosted image.
var compressFromUrlImageTask = png . CompressFromUrl ( " image url " ) ;
// If you want to actually save this compressed image off
// it will need to be downloaded
var compressedImage = await compressImageTask . Download ( ) ;
// you can then get the bytes
var bytes = await compressedImage . GetImageByteData ( ) ;
// get a stream instead
var stream = await compressedImage . GetImageStreamData ( ) ;
// or just save to disk
await compressedImage . SaveImageToDisk ( " pathToSaveImage " ) ;
// Putting it all together
await png . Compress ( " path " )
. Download ( )
. SaveImageToDisk ( " savedPath " ) ;
Weitere Details zum Ergebnis der Komprimierung finden Sie auch in den Input
und Output
eines Compress
. Einige Beispiele:
var result = await png . Compress ( " pathToFile or byte array or stream " ) ;
// old size
result . Input . Size ;
// new size
result . Output . Size ;
// URL of the compressed Image
result . Output . Url ;
using var png = new TinyPngClient ( " yourSecretApiKey " ) ;
var compressImageTask = png . Compress ( " pathToFile or byte array or stream " ) ;
var resizedImageTask = compressImageTask . Resize ( width , height ) ;
await resizedImageTask . SaveImageToDisk ( " pathToSaveImage " ) ;
// altogether now....
await png . Compress ( " pathToFile " )
. Resize ( width , height )
. SaveImageToDisk ( " pathToSaveImage " ) ;
Es gibt bestimmte Kombinationen bei der Angabe von Größenänderungsoptionen, die nicht mit TinyPNG kompatibel sind. Abhängig von der Art der Größenänderung, die Sie durchführen möchten, umfassen wir auch stark typisierte Größenänderungsoperationen.
using var png = new TinyPngClient ( " yourSecretApiKey " ) ;
var compressTask = png . Compress ( " pathToFile or byte array or stream " ) ;
await compressTask . Resize ( new ScaleWidthResizeOperation ( width ) ) ;
await compressTask . Resize ( new ScaleHeightResizeOperation ( height ) ) ;
await compressTask . Resize ( new FitResizeOperation ( width , height ) ) ;
await compressTask . Resize ( new CoverResizeOperation ( width , height ) ) ;
Aus dem Ergebnis der Resize()
Methode sind dieselben Byte[]
, Stream
, File
und Url
-Pfad-APIs verfügbar.
Mit der Convert()
Methode können Sie Bilder in verschiedene Formate konvertieren. Dadurch wird ein Objekt zurückgegeben, das die konvertierten Bilddaten enthält.
using var png = new TinyPngClient ( " yourSecretApiKey " ) ;
var compressAndConvert = await png . Compress ( " cat.png " ) . Convert ( ConvertImageFormat . Wildcard ) ;
Durch die Verwendung des Wildcard
-Formats gibt TinyPng den besten Typ für das bereitgestellte Bild zurück.
Für den Fall, dass Sie in ein Bild konvertieren und dabei die Transparenz verlieren, können Sie eine Hintergrundfarbe für das Bild angeben.
var compressAndConvert = await png . Compress ( " cat.png " ) . Convert ( ConvertImageFormat . Wildcard , " #FF0000 " ) ;
Das Ergebnis eines Komprimierungsvorgangs kann direkt im Amazon S3-Speicher gespeichert werden. Ich würde dringend empfehlen, die Dokumentation von TinyPNG.com zu konsultieren, um zu erfahren, wie der entsprechende S3-Zugriff konfiguriert wird.
Wenn Sie Bilder für die meisten Anfragen in S3 speichern, können Sie ein AmazonS3Configuration
Objekt an den Konstruktor übergeben, das für alle nachfolgenden Anfragen verwendet wird.
using var png = new TinyPngClient ( " yourSecretApiKey " ,
new AmazonS3Configuration ( " awsAccessKeyId " , " awsSecretAccessKey " , " bucket " , " region " ) ) ;
var compressedCat = await png . Compress ( " cat.jpg " ) ;
var s3Uri = await png . SaveCompressedImageToAmazonS3 ( compressedCat , " file-name.png " ) ;
// If you'd like to override the particular bucket or region
// an image is being stored to from what is specified in the AmazonS3Configuration:
var s3UriInNewSpot = await png . SaveCompressedImageToAmazonS3 (
compressedCat ,
" file-name.png " ,
bucketOverride : " different-bucket " ,
regionOverride : " different-region " ) ;
Sie können ein AmazonS3Configuration
-Objekt auch direkt an Aufrufe von SaveCompressedImageToAmazonS3
übergeben
using var png = new TinyPngClient ( " yourSecretApiKey " ) ;
var compressedCat = await png . Compress ( " cat.jpg " ) ;
var s3Uri = await png . SaveCompressedImageToAmazonS3 ( compressedCat ,
new AmazonS3Configuration (
" awsAccessKeyId " ,
" awsSecretAccessKey " ,
" bucket " ,
" region " ) , " file-name.png " ) ;
Sie können die Anzahl der von Ihnen durchgeführten Komprimierungsvorgänge ablesen, indem Sie die Eigenschaft CompressionCount
anhand des Ergebnisses aller von Ihnen durchgeführten Vorgänge überprüfen. Dies ist nützlich, um Ihre API-Nutzung im Auge zu behalten.
var compressedCat = await png . Compress ( " cat.jpg " ) ;
compressedCat . CompressionCount ; // = 5
TinyPngClient kann HttpClient als Konstruktorüberladung verwenden, deren Lebensdauer von außerhalb der Bibliothek gesteuert werden kann.
var httpClient = new HttpClient ( ) ;
var png = new TinyPngClient ( " yourSecretApiKey " , httpClient ) ;