Это стандартная оболочка .NET для службы сжатия изображений TinyPNG.com. Это не официальный продукт TinyPNG.com.
Byte[]
, Stream
, File
и Url
Установить через Nuget
Install-Package TinyPNG
Установить через dotnet
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
. Это позволит избежать необходимости использования двух разных пространств имен.CompressFromUrl
был удален. Теперь это доступно через новую перегрузку для Compress
которая принимает объект Uri
.TinyPng
, раньше оно было немного смешанным. API изменился по сравнению с версией V2, прежде всего вам больше не нужно ждать каждого отдельного шага использования API TinyPNG, теперь вы можете связывать соответствующие вызовы вместе, поскольку методы расширения теперь работают с Task<T>
.
// 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 " ) ;
Дополнительные сведения о результате сжатия также доступны в свойствах Input
и Output
операции Compress
. Несколько примеров:
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 " ) ;
При указании параметров изменения размера существуют определенные комбинации, которые несовместимы с TinyPNG. Мы также включаем строго типизированные операции изменения размера, в зависимости от типа изменения размера, который вы хотите выполнить.
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 ) ) ;
Те же API Byte[]
, Stream
, File
и Url
path доступны из результата метода Resize()
.
Вы можете конвертировать изображения в разные форматы, используя метод Convert()
. Это вернет объект, содержащий преобразованные данные изображения.
using var png = new TinyPngClient ( " yourSecretApiKey " ) ;
var compressAndConvert = await png . Compress ( " cat.png " ) . Convert ( ConvertImageFormat . Wildcard ) ;
Используя формат Wildcard
, TinyPng вернет лучший тип предоставленного изображения.
В сценарии, когда вы конвертируете в изображение и теряете прозрачность, вы можете указать цвет фона, который будет использоваться для изображения.
var compressAndConvert = await png . Compress ( " cat.png " ) . Convert ( ConvertImageFormat . Wildcard , " #FF0000 " ) ;
Результат любой операции сжатия можно сохранить непосредственно в хранилище Amazon S3. Я настоятельно рекомендую обратиться к документации TinyPNG.com, чтобы узнать, как настроить соответствующий доступ S3.
Если вы собираетесь хранить изображения для большинства запросов в S3, вы можете передать в конструктор объект AmazonS3Configuration
, который будет использоваться для всех последующих запросов.
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 " ) ;
Вы также можете передать объект AmazonS3Configuration
непосредственно в вызовы SaveCompressedImageToAmazonS3
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 " ) ;
Вы можете узнать количество выполненных вами операций сжатия, проверив свойство CompressionCount
в результате любой выполненной вами операции. Это полезно для отслеживания использования API.
var compressedCat = await png . Compress ( " cat.jpg " ) ;
compressedCat . CompressionCount ; // = 5
TinyPngClient может использовать HttpClient в качестве перегрузки конструктора, временем жизни которого можно управлять извне библиотеки.
var httpClient = new HttpClient ( ) ;
var png = new TinyPngClient ( " yourSecretApiKey " , httpClient ) ;