一、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-tw/n/286505.html