一、AVIF和JPG的區別
AVIF和JPG都是圖片格式,但AVIF一般比JPG更小。AVIF是最新的開源圖片格式,它採用了先進的壓縮技術。
然而,AVIF對於一些老舊設備來說可能無法支持,因此有些情況下需要將AVIF格式的圖片轉換為JPG格式。
二、使用在線轉換工具
如果您不想涉及到代碼,可以使用在線轉換工具來將AVIF格式的圖片轉換為JPG格式。
例如,您可以使用Squoosh在線轉換工具。該工具支持將多種圖片格式轉換為JPG,包括AVIF。
const input = document.querySelector('input[type="file"]');
const image = new Image();
const reader = new FileReader();
reader.addEventListener('load', () => {
image.src = reader.result;
image.decode().then(() => {
const output = document.querySelector('.output');
const converted = new Image();
converted.src = canvas.toDataURL('image/jpeg');
output.appendChild(converted);
});
});
input.addEventListener('change', () => {
const file = input.files[0];
if (file) {
reader.readAsDataURL(file);
}
});
三、使用Python將AVIF格式的圖片轉換為JPG格式
如果您想自己編寫代碼,可以使用Python語言來將AVIF格式的圖片轉換為JPG格式。
您可以使用Pillow庫來進行圖片處理。以下是一段示例代碼:
from PIL import Image
im = Image.open("image.avif")
im.save("image.jpg", "JPEG")
四、使用Java將AVIF格式的圖片轉換為JPG格式
如果您想使用Java語言來將AVIF格式的圖片轉換為JPG格式,可以使用ImageIO庫。以下是一段示例代碼:
import javax.imageio.ImageIO;
import java.io.File;
import java.awt.image.BufferedImage;
BufferedImage image = ImageIO.read(new File("image.avif"));
ImageIO.write(image, "jpg", new File("image.jpg"));
五、使用C++將AVIF格式的圖片轉換為JPG格式
如果您想使用C++語言來將AVIF格式的圖片轉換為JPG格式,可以使用libavif和libjpeg-turbo庫。以下是一段示例代碼:
#include
#include "avif/avif.h"
#include "turbojpeg.h"
int main() {
// Open the AVIF file
avifROData raw = avifRawDataCreateFromFile("image.avif");
avifImage* avif = avifImageCreateEmpty();
avifDecoder* decoder = avifDecoderCreate();
avifResult result = avifDecoderRead(decoder, avif, &raw);
avifRawDataFree(&raw);
// Convert the AVIF image to a JPEG image
tjhandle tj = tjInitCompress();
unsigned char* jpegBuf = NULL;
unsigned long jpegSize = 0;
avifRGBImage rgbImage;
avifRGBImageSetDefaults(&rgbImage, avif);
rgbImage.format = AVIF_RGB_FORMAT_RGBA;
rgbImage.depth = 8;
size_t rgbSize = avifRGBImageCalculateStorage(&rgbImage);
rgbImage.pixels = (uint8_t*)avifAlloc(rgbSize);
avifRGBImageFill(&rgbImage, avif);
tjCompress2(tj, rgbImage.pixels, rgbImage.width, 0, rgbImage.height, TJPF_RGBA, &jpegBuf, &jpegSize, TJSAMP_444, 90, TJFLAG_FASTDCT);
avifFree(rgbImage.pixels);
tjDestroy(tj);
// Write the JPEG image to a file
FILE* f = fopen("image.jpg", "wb");
fwrite(jpegBuf, 1, jpegSize, f);
fclose(f);
tjFree(jpegBuf);
// Clean up
avifDecoderDestroy(decoder);
avifImageDestroy(avif);
return 0;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/286505.html
微信掃一掃
支付寶掃一掃