示例#1
0
int main(int argc, const char *argv[])
{
    tiff_t *fp;
    TIFF_STATUS ret;
    tiff_off_t ifd_off;
    tiff_ifd_t *ifd;

    tiff_tag_t *subifd;
    int subifd_count = 0;
    int subifd_type = 0;
    uint32_t *subifds = NULL;

    int i;

    if (argc < 2) {
        printf("insufficient arguments.\n");
        return -1;
    }

    ret = tiff_open(&fp, argv[1], "r");

    if (ret != TIFF_OK) {
        printf("file could not be openened: %d\n", ret);
        return -1;
    }

    tiff_get_base_ifd_offset(fp, &ifd_off);

    do {
        tiff_read_ifd(fp, ifd_off, &ifd);
        display_ifd(fp, ifd);

        read_ifd(fp, ifd, TIFF_TAG_SUBIFD);
        read_ifd(fp, ifd, TIFF_TAG_EXIFIFD);

        tiff_get_next_ifd_offset(fp, ifd, &ifd_off);
        tiff_free_ifd(fp, ifd);
    } while (ifd_off != 0);

    tiff_close(fp);

    return 0;
}
示例#2
0
int jxr_read_image_container(jxr_container_t container, FILE*fd)
{
    unsigned char buf[4];
    size_t rc;
    uint32_t ifd_off;

    rc = fread(buf, 1, 4, fd);
    if (rc < 4)
        return JXR_EC_BADMAGIC;

    if (buf[0] != 0x49) return JXR_EC_BADMAGIC;
    if (buf[1] != 0x49) return JXR_EC_BADMAGIC;
    if (buf[2] != 0xbc) return JXR_EC_BADMAGIC;
    if (buf[3] > 0x01) return JXR_EC_BADMAGIC; /* Version. */

    rc = fread(buf, 1, 4, fd);
    if (rc != 4) return JXR_EC_IO;

    ifd_off = (buf[3] << 24) + (buf[2]<<16) + (buf[1]<<8) + (buf[0]<<0);
    container->image_count = 0;

    while (ifd_off != 0) {
        uint32_t ifd_next;

        container->image_count += 1;
        container->table_cnt = (unsigned*)realloc(container->table_cnt,
            container->image_count * sizeof(unsigned));
        container->table = (struct ifd_table**) realloc(container->table,
            container->image_count * sizeof(struct ifd_table*));

        if (ifd_off & 0x1) return JXR_EC_IO;
        rc = fseek(fd, ifd_off, SEEK_SET);
        rc = read_ifd(container, fd, container->image_count-1, &ifd_next);
        if (rc < 0) return (int) rc;

        ifd_off = ifd_next;
    }

    return 0;
}
示例#3
0
void read_E1_header(FILE *fp, unsigned short size)
{
    printf("  E1 Header\n");

    /*
     * Exif Header
     */
    char exif_hdr[6];
    fread(exif_hdr, sizeof(exif_hdr), 1, fp);
    printf("    %c\n", exif_hdr[0]);

    /*
     * TIFF Header
     */
    tiff_offset = ftell(fp);
    unsigned char tiff_hdr[8];
    fread(tiff_hdr, sizeof(tiff_hdr), 1, fp);
    if (tiff_hdr[0] == 'M') {
        printf("    Motorola align\n");
    } else if (tiff_hdr[0] == 'I') {
        printf("    Intel align\n");
    } else {
        printf("    UNKNOWN align\n");
    }
    unsigned int ifd_offset = (tiff_hdr[4]<<24)
        | (tiff_hdr[5]<<16)
        | (tiff_hdr[6]<<8)
        | (tiff_hdr[7]);
    printf("    IFD Offset = %d\n", ifd_offset);

    /*
     * IFD
     */
    while (ifd_offset != 0) {
      ifd_offset = read_ifd(fp, ifd_offset + tiff_offset);
    }
}