ICO to JPG Converter

Convert Windows Icon (.ico) and Cursor (.cur) files into crisp, web-ready JPG / JPEG photos with customizable background fills and quality presets.

Choose an ICO file or drag & drop here Supports multi-resolution 16x16, 32x32, 48x48, 64x64, 128x128, and 256x256 ICOs (Max 5MB)

How to Convert ICO to JPG Online

1

Upload ICO File or Paste Base64

Drag and drop a .ico or .cur file into the drop zone, or paste a Base64 ICO Data URI string into the editor.

2

Configure Background & Quality

Select your desired solid background fill (White, Black, Navy) and choose a JPEG compression quality level.

3

Convert & Download

Click Convert to JPG to convert your Windows icon into a crisp JPEG photo, then Download your image.

Tool Options

Multi-Resolution Extraction

Automatically selects and extracts the highest-resolution icon embed from multi-frame ICO packages.

Solid Background Transparency Fill

Composites icon transparency masks cleanly over customizable solid background fills without black fringe borders.

Retina & Custom Dimension Scaling

Upscale small 16x16 or 32x32 favicons to 2x, 3x, or 4x Retina resolution with custom width and height overrides.

Your Data Privacy

Web Tool
Privacy-First Architecture
Most of our web tools process your data entirely in-browser. Where server processing is technically required, payloads are evaluated statelessly in-memory and are never stored, saved, or logged.
REST API
Stateless In-Memory Processing
When you use our API endpoints, your requests are processed strictly in-memory without persistent database storage, disk logging, or data retention.
Want to learn more about how we safeguard your information and infrastructure?
Read our full Privacy Policy for detailed security standards, data retention principles, and compliance guarantees.

What does the ICO to JPG Converter do?

The ICO to JPG Converter converts Windows Icon (.ico) and Cursor (.cur) files into lightweight, web-compatible Joint Photographic Experts Group (.jpg / .jpeg) photos with customizable solid background colors, quality settings, and Retina resolution scaling.

ICO files frequently contain multiple embedded icon frames (such as 16x16, 32x32, 48x48, and 256x256) designed for Windows desktop shells. Converting ICO to JPG automatically extracts the crispest high-resolution frame, flattens alpha transparency onto a solid background, and produces a standard JPEG image suitable for sharing and web display.

Core Concepts

  • ICONDIR & ICONDIRENTRY Parsing: Inspects multi-image directory headers to identify intrinsic widths, heights, bit depths, and icon frame counts.
  • Maximum Resolution Frame Extraction: Automatically extracts the highest available sub-icon resolution (up to 256x256) embedded inside the .ico container.
  • Customizable Solid Background Replacement: Smoothly composites 32-bit alpha transparency channels onto your chosen solid background color (White, Black, Off-White, Dark Navy) to prevent dark halo fringes.
  • Variable JPEG Quality Compression: Adjust compression between 60% and 100% to optimize between bandwidth and image sharpness.

How to use the tool?

  1. Upload ICO File or Paste Base64: Drag and drop a .ico or .cur file into the drop zone, or paste a Base64 ICO Data URI string into the editor.
  2. Select Background Fill & Quality: Choose your background fill color (#ffffff, #000000) and JPEG quality preset (92%, 100%, 80%).
  3. Optional Dimension Overrides: Set custom pixel Width or Height overrides if resizing is needed.
  4. Convert to JPG: Click Convert to JPG to execute rasterization.
  5. Download or Copy: Click Download to save your .jpg file or Copy the Base64 Data URI.

Related Developer Utilities

REST API Integration

blueutils.com provides a free REST API endpoint (POST https://blueutils.com/api/image/ico-to-jpg) for programmatic validation, ICO header parsing, and JPEG Data URI formatting.

API Request Parameters

Name Type Description Example
rawText String Base64 ICO Data URI or raw Base64 payload. "data:image/x-icon;base64,AAABAA..."
options.scale Number Multiplier scale factor (1, 2, 3, 4). Default is 1. 2
options.quality Number JPEG quality factor from 0.1 to 1.0. Default is 0.92. 0.92
options.background String Hex or CSS background fill color. Default is "#ffffff". "#ffffff"
options.width Number Optional target width in pixels. 512
options.height Number Optional target height in pixels. 512

API Request Payload Examples

cURL

curl -X POST https://blueutils.com/api/image/ico-to-jpg \
  -H "Content-Type: application/json" \
  -d '{
    "rawText": "data:image/x-icon;base64,AAABAAEAAQEAAAEAIAAwAAAAFgAAACgAAAABAAAAAgAAAAEAIAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAD/AAD//wAA",
    "options": {
      "scale": 1,
      "quality": 0.92,
      "background": "#ffffff"
    }
  }'

Python

import requests

url = "https://blueutils.com/api/image/ico-to-jpg"
payload = {
    "rawText": "data:image/x-icon;base64,AAABAAEAAQEAAAEAIAAwAAAAFgAAACgAAAABAAAAAgAAAAEAIAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAD/AAD//wAA",
    "options": {
        "scale": 1,
        "quality": 0.92,
        "background": "#ffffff"
    }
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.json())

Java

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Main {
    public static void main(String[] args) throws Exception {
        String jsonPayload = """
        {
          "rawText": "data:image/x-icon;base64,AAABAAEAAQEAAAEAIAAwAAAAFgAAACgAAAABAAAAAgAAAAEAIAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAD/AAD//wAA",
          "options": {
            "scale": 1,
            "quality": 0.92,
            "background": "#ffffff"
          }
        }
        """;

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://blueutils.com/api/image/ico-to-jpg"))
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(jsonPayload))
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}

API Response Parameters

Name Type Description Example
isValid Boolean Indicates whether the ICO was parsed successfully. true
mimeType String Target output MIME type (image/jpeg). "image/jpeg"
originalFormat String Detected input MIME type (image/x-icon). "image/x-icon"
dataUri String Base64 JPEG Data URI string. "data:image/jpeg;base64,..."
metadata.originalWidth Number Original width in pixels extracted from highest sub-icon entry. 256
metadata.originalHeight Number Original height in pixels extracted from highest sub-icon entry. 256
metadata.targetWidth Number Scaled target pixel width. 256
metadata.targetHeight Number Scaled target pixel height. 256
metadata.iconCount Number Total number of sub-icon frames inside the ICO file. 1
metadata.bitDepth Number Color bit depth of the selected icon frame (32, 24, 8). 32
metadata.quality Number Applied JPEG compression quality factor. 0.92
metadata.background String Applied solid background color. "#ffffff"
snippets.html String Ready-to-use HTML <img> tag. "<img src=\"...\" />"
snippets.css String Ready-to-use CSS background-image declaration. "background-image: url(\"...\");"

API Response Payload Examples

Success Response (HTTP 200 OK)

{
  "isValid": true,
  "mimeType": "image/jpeg",
  "originalFormat": "image/x-icon",
  "dataUri": "data:image/jpeg;base64,AAABAA...",
  "base64": "AAABAA...",
  "metadata": {
    "originalWidth": 256,
    "originalHeight": 256,
    "targetWidth": 256,
    "targetHeight": 256,
    "scale": 1,
    "quality": 0.92,
    "background": "#ffffff",
    "iconCount": 1,
    "bitDepth": 32,
    "type": "ICO (Icon)",
    "aspectRatio": 1,
    "originalSizeBytes": 70,
    "formattedSize": "70 B"
  },
  "snippets": {
    "html": "<img src=\"data:image/jpeg;base64,...\" width=\"256\" height=\"256\" alt=\"Converted JPEG Graphic\" />",
    "css": "background-image: url(\"data:image/jpeg;base64,...\");",
    "markdown": "![Converted JPEG Graphic](data:image/jpeg;base64,...)"
  }
}

Validation Failure Response (HTTP 400 Bad Request)

{
  "isValid": false,
  "error": "Invalid format: Expected a valid Windows Icon (.ico) or Cursor (.cur) file."
}

Rate Limit Exceeded Response (HTTP 429 Too Many Requests)

{
  "error": "API rate limit exceeded. Please wait or contact support@blueutils.com."
}

Why use an API to convert ICO to JPG?

Automating ICO to JPG conversion via API in build workflows and asset pipelines offers major benefits:

  • Favicon & App Icon Previews: Render Windows and desktop favicon assets into JPEG thumbnails for marketing websites and dashboards.
  • Universal Mobile & Social Compatibility: Allow users to share icon files on social platforms that reject .ico formats.
  • Optimized Token Efficiency for AI Agents: Extracts clean image dimensions and frame count metadata before sending image data to multimodal vision agents.

Native Usage

How to convert ICO to JPG locally using command-line tools:

Windows (CMD / PowerShell)

# PowerShell: Convert ICO largest frame to JPG with white background using ImageMagick
magick "favicon.ico[0]" -background white -flatten -quality 92 "favicon.jpg"

Linux / Unix (Bash / Shell)

# Bash: Convert ICO to JPG using ImageMagick
convert "favicon.ico[0]" -background white -flatten -quality 92 favicon.jpg

# Or using icotool and ImageMagick:
icotool -x -o icon.png favicon.ico && convert icon.png -quality 92 favicon.jpg

Python

# Python using Pillow
from PIL import Image

# Open ICO and convert to RGB with background fill
ico_image = Image.open('favicon.ico')
if ico_image.mode in ('RGBA', 'LA') or (ico_image.mode == 'P' and 'transparency' in ico_image.info):
    alpha = ico_image.convert('RGBA')
    bg = Image.new('RGB', alpha.size, (255, 255, 255))
    bg.paste(alpha, mask=alpha.split()[3])
    bg.save('favicon.jpg', 'JPEG', quality=92)
else:
    ico_image.convert('RGB').save('favicon.jpg', 'JPEG', quality=92)
print("Converted favicon.ico to favicon.jpg successfully")

Java

// Java native ImageIO conversion
import java.io.File;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.Color;
import java.awt.Graphics2D;

public class IcoToJpg {
    public static void main(String[] args) throws Exception {
        BufferedImage icoImage = ImageIO.read(new File("favicon.ico"));
        BufferedImage jpgImage = new BufferedImage(icoImage.getWidth(), icoImage.getHeight(), BufferedImage.TYPE_INT_RGB);
        
        Graphics2D g = jpgImage.createGraphics();
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, icoImage.getWidth(), icoImage.getHeight());
        g.drawImage(icoImage, 0, 0, null);
        g.dispose();

        ImageIO.write(jpgImage, "jpg", new File("favicon.jpg"));
        System.out.println("Converted favicon.ico to favicon.jpg successfully");
    }
}

Frequently Asked Questions (FAQ)

How do I convert an ICO file to JPG online?

Upload your ICO file into the drop zone or paste a Base64 string, choose your desired background fill and JPG quality preset, and click Convert to JPG.

Which resolution is converted if the ICO contains multiple icons?

The converter automatically identifies and extracts the highest-resolution icon frame (up to 256x256) embedded inside your ICO file.

Does the tool handle transparent favicon icons?

Yes. Transparent alpha channels in 32-bit icons are cleanly composited over your chosen solid background color without dark halo fringes.

Rate Limits

UI Limits
100 uses per 15 minutes
Max payload size: 5 MB
API Limits
5 requests per 60 minutes
Max payload size: 256 KB
Need higher API rate limits, increased payload sizes, or custom developer solutions?
Contact our engineering team at support@blueutils.com for custom rate limit increases, higher quota allocations, or tailored enterprise integrations.