Skip to content

Targa (TGA) to PNG converter

TGA → PNG is how a game texture or render leaves Targa for something a browser, chat app or document can show, with the alpha channel intact.

  • Converted with Image engine · input deleted within 24 h
  • Free: 5 conversions a day · 5 MB each
  • Higher limits →

From real runs

What you get — and what changes

  • Alpha channel Kept

    The 199×199 32-bit RLE test image kept its soft-edged alpha in the PNG, and a 16-bit 5-5-5-1 file kept its one-bit mask.

  • Origin flags Kept

    Bottom-left origin (the TGA default) and top-left files both come out upright, and files flagged right-to-left are mirrored back exactly as their header says.

  • Colour-mapped and grayscale Kept

    An 8-bit colour-mapped crate texture stayed a palette PNG (66,348 → 55,029 bytes) and an 8-bit grayscale one stayed grayscale (65,580 → 42,299 bytes).

  • RLE compression Changed

    Run-length data is decoded and recompressed with deflate, which is much tighter on textures: a 2,801,531-byte RLE diffuse map became a 1,110,647-byte PNG.

  • Normal maps Kept

    Tangent-space normal maps keep their exact RGB values (the 1024×1024 sample went from 3,004,900 to 1,761,374 bytes), which matters because any colour shift changes the lighting.

  • All-zero alpha Changed

    Some exporters write 32-bit TGA with every alpha value at 0 and expect it to be ignored. An alpha channel that is empty everywhere is dropped, so a 1024×1024 texture built that way came out as an opaque RGB PNG instead of an invisible one.

  • Image ID and extension area Lost

    The TGA image-ID text, the version 2 extension area (author, date, gamma, postage-stamp thumbnail) and the developer area are not carried into the PNG.

Sample conversions

Character diffuse texture

Input
african_head_diffuse.tga, 2,801,531 bytes, 1024×1024, 24-bit RLE, bottom-left origin.
Output
1,110,647-byte RGB PNG in 4.5 s, upright and pixel-identical. With width 512 it was 404,351 bytes and had gained an opaque alpha channel.

Sprite with soft alpha

Input
rgb32rle.tga, 129,803 bytes, 199×199, 32-bit RLE with a feathered alpha edge.
Output
36,562-byte RGBA PNG in 0.2 s; the transparent surround and the feathering were intact.

Old-style palette texture

Input
crate_color8.tga, 66,348 bytes, 256×256, 8-bit colour-mapped, uncompressed.
Output
55,029-byte palette PNG with the same 256 colours.

A real Targa (TGA) → PNG run

We converted our Targa (TGA) sample (237 KB) with Image engine on 2026-10-20. It took 226 ms and produced a 123 KB PNG file, 48% smaller than the input. The engine raised 1 warning, listed below.

Input · sample.tga · 237 KB

243,163 bytes

Output · sample.png · 123 KB

240 × 300 px, 8-bit, colour type 6

Width
240
Height
300
Encoding
8-bit, colour type 6
  • Image metadata stripped from output.

Options and when to change them

width
Set it to make a preview or thumbnail of a large texture; height follows the aspect ratio.
fit
With both width and height, contain pads to the box, cover crops to fill it and fill stretches; textures that must tile should keep their aspect ratio.
background
Only colours the padding added by fit contain; the texture's own alpha is left alone in PNG.

Do it yourself

ImageMagick

bash
magick texture.tga texture.png

Check the alpha afterwards: tools disagree about 32-bit TGA files whose alpha is all zero, and some show them opaque while others show nothing.

Python (Pillow)

bash
from PIL import Image

im = Image.open("texture.tga")
if im.mode == "RGBA" and im.getextrema()[3] == (0, 0):
    im = im.convert("RGB")  # unused alpha channel
im.save("texture.png")

Targa (TGA) to PNG by API or MCP

The HTTP API and the MCP server run the exact engine this page uses (Image engine); the response carries the same warnings the web converter shows. Check support first with GET /api/v1/pairs?from=tga&to=png.

curl
curl -X POST https://filetypeconverters.com/api/v1/convert \
  -H "Authorization: Bearer $FTC_API_KEY" \
  -F "file=@input.tga" -F "from=tga" -F "to=png" \
  -F 'options={"width":0}' \
  --output output.png

Options this engine accepts for Targa (TGA) → PNG

KeyApplies toTypeDefault
widthWriting PNGnumber0
heightWriting PNGnumber0
fitWriting PNGcontain · cover · fillcontain
qualityWriting PNGnumber90
backgroundWriting PNGstring#ffffff
stripMetadataWriting PNGbooleantrue
API reference

When this is the wrong conversion

  • If the texture is going back into a game engine or mod tool, check what it imports; many read PNG directly, but some older pipelines only accept TGA and the PNG would have to be converted back.
  • If the TGA is a photographic render headed for the web, TGA → JPG or WebP is a fraction of the PNG size.

Targa (TGA) to PNG questions

Why is my TGA upside down in some programs?

TGA stores rows from the bottom up unless a header flag says the first row is the top. Programs that ignore the flag show the picture flipped. We read the flag, so the PNG is upright and has no flag left to misread.

My PNG came out completely transparent. What happened?

The TGA probably has an alpha channel full of zeros that the program which wrote it meant as unused. We currently honour it as transparency, and JPG output is no help because it fills those pixels with the background colour. Remove the alpha channel in an editor, or use the Python snippet above, then convert.

Is the PNG pixel-identical to the TGA?

Yes when you do not resize: both formats are lossless, so colours, alpha and palette entries match exactly. Resizing resamples the pixels, and normal or height maps should not be resized for use in a game.