Este é um wrapper .NET Standard em torno do serviço de compactação de imagens TinyPNG.com. Este não é um produto oficial do TinyPNG.com.
Byte[]
, Stream
, File
e Url
disponíveis Instalar via Nuget
Install-Package TinyPNG
Instalar via 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
. Isso evitará a necessidade de trazer dois namespaces diferentes.CompressFromUrl
foi removido. Isto agora está disponível através de uma nova sobrecarga para Compress
que recebe um objeto Uri
TinyPng
, era um pouco confuso anteriormente. A API mudou da V2, principalmente você não precisa mais esperar cada etapa individual de uso da API TinyPNG, agora você pode encadear chamadas apropriadas, pois os métodos de extensão agora operam em 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 " ) ;
Mais detalhes sobre o resultado da compactação também estão disponíveis nas propriedades Input
e Output
de uma operação Compress
. Alguns exemplos:
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 " ) ;
Existem certas combinações ao especificar opções de redimensionamento que não são compatíveis com o TinyPNG. Também incluímos operações de redimensionamento fortemente tipadas, dependendo do tipo de redimensionamento que você deseja fazer.
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 ) ) ;
As mesmas APIs de Byte[]
, Stream
, File
e Url
path estão disponíveis no resultado do método Resize()
.
Você pode converter imagens para diferentes formatos usando o método Convert()
. Isto retornará um objeto que contém os dados da imagem convertida.
using var png = new TinyPngClient ( " yourSecretApiKey " ) ;
var compressAndConvert = await png . Compress ( " cat.png " ) . Convert ( ConvertImageFormat . Wildcard ) ;
Ao usar o formato Wildcard
, o TinyPng retornará o melhor tipo para a imagem fornecida.
No cenário em que você está convertendo para uma imagem e perdendo transparência, você pode especificar uma cor de fundo para usar na imagem.
var compressAndConvert = await png . Compress ( " cat.png " ) . Convert ( ConvertImageFormat . Wildcard , " #FF0000 " ) ;
O resultado de qualquer operação de compactação pode ser armazenado diretamente no armazenamento do Amazon S3. Eu recomendo fortemente consultar a documentação do TinyPNG.com sobre como configurar o acesso S3 apropriado.
Se você for armazenar imagens para a maioria das solicitações no S3, poderá passar um objeto AmazonS3Configuration
para o construtor que será usado para todas as solicitações subsequentes.
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 " ) ;
Você também pode passar um objeto AmazonS3Configuration
diretamente em chamadas para 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 " ) ;
Você pode obter uma leitura do número de operações de compactação executadas inspecionando a propriedade CompressionCount
no resultado de qualquer operação executada. Isso é útil para manter o controle sobre o uso da API.
var compressedCat = await png . Compress ( " cat.jpg " ) ;
compressedCat . CompressionCount ; // = 5
TinyPngClient pode usar HttpClient como sobrecarga de construtor, cujo tempo de vida pode ser controlado de fora da biblioteca.
var httpClient = new HttpClient ( ) ;
var png = new TinyPngClient ( " yourSecretApiKey " , httpClient ) ;