Please bookmark this page to avoid losing your image tool!

Image Software Identifier Tool

(Free & Supports Bulk Upload)

Drag & drop your images here or

The result will appear here...
You can edit the below JavaScript code to customize the image tool.
async function processImage(originalImg) {
    /**
     * Dynamically loads the exif-js script from a CDN.
     * @returns {Promise<void>} A promise that resolves when the script is loaded.
     */
    const loadExifJs = () => {
        return new Promise((resolve, reject) => {
            // Check if the library's global object already exists
            if (window.EXIF) {
                return resolve();
            }
            const script = document.createElement('script');
            script.src = 'https://cdn.jsdelivr.net/npm/exif-js/exif.js';
            script.onload = () => resolve();
            script.onerror = () => reject(new Error('Failed to load the exif-js library.'));
            document.head.appendChild(script);
        });
    };

    /**
     * Wraps the callback-based EXIF.getData function in a Promise.
     * It re-fetches the image with the crossOrigin attribute to handle CORS.
     * @param {Image} img The source image object.
     * @returns {Promise<object>} A promise that resolves with the EXIF tags.
     */
    const getExifData = (img) => {
        return new Promise((resolve) => {
            // Create a new image element to safely set crossOrigin attribute.
            // This is necessary for reading data from images hosted on other domains.
            const tempImg = new Image();
            tempImg.crossOrigin = "Anonymous";
            
            tempImg.onload = () => {
                EXIF.getData(tempImg, function() {
                    const allTags = EXIF.getAllTags(this);
                    resolve(allTags || {}); // Ensure we always resolve with an object
                });
            };
            
            tempImg.onerror = () => {
                // If the image fails to load (e.g., CORS error), resolve with empty data.
                console.warn("Could not load image for EXIF reading, possibly due to CORS policy.");
                resolve({});
            };
            
            tempImg.src = img.src;
        });
    };

    // Create the main container for the output
    const container = document.createElement('div');
    container.style.fontFamily = 'Arial, sans-serif';
    container.style.padding = '20px';
    container.style.maxWidth = '600px';
    container.style.margin = '20px auto';
    container.style.border = '1px solid #e0e0e0';
    container.style.borderRadius = '8px';
    container.style.boxShadow = '0 2px 4px rgba(0,0,0,0.05)';
    container.style.textAlign = 'left';

    const title = document.createElement('h3');
    title.textContent = 'Image Metadata Identifier';
    title.style.margin = '0 0 15px 0';
    title.style.color = '#333';
    container.appendChild(title);

    try {
        await loadExifJs();
        const exifData = await getExifData(originalImg);
        
        const infoList = document.createElement('ul');
        infoList.style.listStyleType = 'none';
        infoList.style.padding = '0';
        infoList.style.margin = '0';

        let foundData = false;

        /**
         * Helper to add a piece of information to the list if it exists.
         * @param {string} label The label for the data point.
         * @param {string|number} value The value from the EXIF data.
         */
        const addInfo = (label, value) => {
             if (value && String(value).trim() !== "") {
                foundData = true;
                const listItem = document.createElement('li');
                listItem.style.marginBottom = '8px';
                listItem.style.fontSize = '14px';
                listItem.innerHTML = `<strong style="display: inline-block; width: 120px; color: #555;">${label}:</strong> ${String(value)}`;
                infoList.appendChild(listItem);
             }
        };

        // Check for common tags that identify software or device
        addInfo('Software', exifData.Software);
        addInfo('Host Computer', exifData.HostComputer);
        addInfo('Artist', exifData.Artist);
        addInfo('Copyright', exifData.Copyright);
        addInfo('Camera Make', exifData.Make);
        addInfo('Camera Model', exifData.Model);
        
        if (foundData) {
            container.appendChild(infoList);
        } else {
            const noDataMessage = document.createElement('p');
            noDataMessage.textContent = 'No identifying software or camera information could be found in the image\'s metadata (EXIF). This could be because the data was removed during saving or the image format does not support it.';
            noDataMessage.style.color = '#777';
            container.appendChild(noDataMessage);
        }

    } catch (error) {
        console.error('Error identifying image software:', error);
        container.textContent = 'An error occurred while trying to read the image metadata. Please ensure the image is from an accessible URL and check the browser console for more details.';
        container.style.color = 'red';
    }

    return container;
}

Free Image Tool Creator

Can't find the image tool you're looking for?
Create one based on your own needs now!

Description

The Image Software Identifier Tool allows users to extract and view metadata from images, specifically focusing on EXIF data. This tool can help identify the software used to process an image, the camera make and model, the artist’s name, and copyright information. It is particularly useful for photographers, graphic designers, or anyone interested in metadata analysis, offering insights into the creation and handling of images, which can be valuable for documentation and attribution purposes.

Leave a Reply

Your email address will not be published. Required fields are marked *