Tengo un montón de archivos jpeg con diferentes tamaño de la imagen. Por ejemplo, aquí está la primera 640 bytes dado por hexdump de una imagen de tamaño 256*384(píxeles):

0000000: ffd8 ffe0 0010 4a46 4946 0001 0101 0048  ......JFIF.....H
0000010: 0048 0000 ffdb 0043 0003 0202 0302 0203  .H.....C........
0000020: 0303 0304 0303 0405 0805 0504 0405 0a07  ................
0000030: 0706 080c 0a0c 0c0b 0a0b 0b0d 0e12 100d  ................

Supongo que el tamaño de la información mus ser dentro de estas líneas. Pero soy incapaz de ver qué bytes dar el tamaño correctamente. Alguien me puede ayudar a encontrar los campos que contiene la información de tamaño?

OriginalEl autor rajeshsr | 2010-03-25

2 Comentarios

  1. 10

    De acuerdo a la La sintaxis y la estructura sección de la JPEG página en la wikipedia, la anchura y la altura de la imagen, no parecen ser almacenados en la imagen de sí mismo-o, al menos, no de una manera que es muy fácil de encontrar.


    Aún así, citando Imagen JPEG de compresión de preguntas frecuentes, parte 1/2 :

    Asunto: [22] ¿Cómo puede mi programa de extracto de dimensiones de imagen de JPEG
    archivo?

    El encabezado de un archivo JPEG se compone de
    una serie de bloques, llamados «marcadores».
    La imagen de la altura y la anchura son almacenados
    en un marcador de tipo SOFn
    (Inicio De
    Marco, tipo N)
    .
    Para encontrar el SOFn
    usted debe saltar encima de la anterior
    marcadores; usted no tiene que saber lo que es
    en los otros tipos de marcadores, sólo
    el uso de la longitud de las palabras para saltar
    ellos.
    La lógica mínima necesaria es
    tal vez una página de código en C.
    (Algunos
    personas han recomendado buscar
    para el byte par que representa SOFn,
    sin prestar atención al marcador
    la estructura de bloque. Esto es inseguro
    porque antes de marcador puede contener
    el SOFn patrón, ya sea por casualidad o
    debido a que contiene una comprimidas JPEG
    imagen en miniatura. Si usted no sigue las
    el marcador de la estructura que va a recuperar
    la miniatura del tamaño, en vez de la
    tamaño de la imagen principal.)

    Un profusamente
    comentó ejemplo en C se puede encontrar en
    rdjpgcom.c en el IJG distribución
    (véase la parte 2, punto 15).
    Código Perl
    se puede encontrar en wwwis, de
    http://www.tardis.ed.ac.uk/~arca/wwwis/.

    (Ergh, que el vínculo parece roto…)


    He aquí una porción de código C que podría ayudarle, a pesar de que : La decodificación de la anchura y la altura de un JPEG (JFIF) archivo

    Si ese es el caso ¿cómo nautilus o algún otro visor de imágenes decide la resolución de la imagen? Que también ellos parecen estar de acuerdo en el valor 256*384 para que la imagen
    Muchas gracias! Tengo entendido ahora. greping 0xFFC0 parece que funciona, de todos modos yo no entiendo el peligro allí! Gracias de nuevo! Por CIERTO, este es mi primer post en stackoverflow! Bastante sorprendido de la rapidez y la exactitud de la respuesta. Gracias a todos!
    Los dos últimos enlaces están rotos.
    Dos últimos enlaces todavía están rotos
    Aquí está el archivo para el último enlace: web.archive.org/web/20131016210645/http://www.64lines.com/…

    OriginalEl autor Pascal MARTIN

  2. 2

    Esta función leerá JPEG propiedades

    function jpegProps(data) {          //data is an array of bytes
        var off = 0;
        while(off<data.length) {
            while(data[off]==0xff) off++;
            var mrkr = data[off];  off++;
    
            if(mrkr==0xd8) continue;    //SOI
            if(mrkr==0xd9) break;       //EOI
            if(0xd0<=mrkr && mrkr<=0xd7) continue;
            if(mrkr==0x01) continue;    //TEM
    
            var len = (data[off]<<8) | data[off+1];  off+=2;  
    
            if(mrkr==0xc0) return {
                bpc : data[off],     //precission (bits per channel)
                w   : (data[off+1]<<8) | data[off+2],
                h   : (data[off+3]<<8) | data[off+4],
                cps : data[off+5]    //number of color components
            }
            off+=len-2;
        }
    }
    

    OriginalEl autor Ivan Kuckir

Dejar respuesta

Please enter your comment!
Please enter your name here