Systems and methods for providing access to an embedded thumbnail image

Systems and methods are disclosed for providing access to a thumbnail image that is embedded within an image file along with a corresponding main image. An exemplary method involves receiving a request from a client for the thumbnail image. The thumbnail image is retrieved from an image host. The entire image file is not retrieved from the image host. The thumbnail image may be sent to the client. Alternatively, the thumbnail location information may be sent to the client. Retrieving the thumbnail image from the image host may involve identifying a location of the thumbnail image within the image file, and retrieving data from the image file corresponding to the location.

TECHNICAL FIELD

The present invention relates generally to digital images. More specifically, the present invention relates to systems and methods for retrieving a thumbnail image that is embedded within the same image file as the corresponding main image.

BACKGROUND

An information system typically includes at least one computer system (a server) that makes information available so that other computer systems (clients) can access the information. The server typically manages access to the information. The server and clients communicate via messages conforming to a communication protocol and sent over a communication channel such as a computer network.

Information sources managed by the server may include files, databases, and applications on the server system or on an external computer system. The information that the server provides may be stored on the server, converted from other formats manually or automatically, calculated on the server in response to a client request, derived from data and applications on the server or other machines, or derived by any combination of these and/or other suitable techniques.

One type of information source that is often managed by a server is a digital image file. A digital image file is a picture that has been created or copied and stored in electronic form. A digital image file may be created by taking a picture with a digital camera, scanning a hard copy of a picture, etc.

Often, there are at least two types of digital images associated with the same picture, the “main” image and a corresponding “thumbnail” image. The thumbnail image is a smaller representation of the main image. Thumbnail images are usually intended to make it easier and faster to look at or manage a group of larger images. For example, software that allows a user to manage a number of images often provides a thumbnail version of each image so that the user does not have to remember the file name of each image.

Often, a client may request a thumbnail image from a server. This may be the case, for example, when a web server is transmitting a web page to a client browser. Many web pages display thumbnail images instead of full size images because the thumbnail images download more quickly and still communicate the intended expression to the user.

Sometimes, both the main image and the corresponding thumbnail image are included in the same image file. In other words, the thumbnail image may be embedded in the image file along with the main image. Accordingly, benefits may be realized by improved systems and methods for retrieving a thumbnail image that is embedded in an image file along with the corresponding main image.

DETAILED DESCRIPTION

A method in a server for fulfilling a request from a client for a thumbnail image is disclosed. A request for a thumbnail image is received from a client. The thumbnail image is embedded in an image file along with a corresponding main image. The thumbnail image is retrieved from an image host. The entire image file is not retrieved from the image host. The thumbnail image is sent to the client.

In some embodiments, retrieving the thumbnail image may involve identifying a location of the thumbnail image within the image file, and retrieving data from the image file corresponding to the location. Identifying the location of the thumbnail image may involve retrieving a first portion of the image file from the image host, and then determining whether the first portion of the image file comprises thumbnail location information. Identifying the location of the thumbnail image may additionally involve retrieving a second portion of the image file from the image host if the first portion does not comprise the thumbnail location information. It may then be determined whether the second portion of the image file includes the thumbnail location information. The thumbnail location information may include an offset to the thumbnail image in the image file, and a size of the thumbnail image.

In some embodiments, the image file is in the exchangeable image file format (EXIF). The request may be received from the client and the thumbnail image may be sent to the client in accordance with hypertext transfer protocol (HTTP). In addition, the thumbnail image may be retrieved from the image host in accordance with hypertext transfer protocol (HTTP).

Retrieving the thumbnail image from the image host may involve retrieving the bytes corresponding to the thumbnail image. The thumbnail image may be retrieved from the image host in accordance with hypertext transfer protocol (HTTP). Retrieving the bytes corresponding to the thumbnail image may be accomplished using the byte-range feature of HTTP.

A server that is configured to fulfill a request from a client for a thumbnail image is also disclosed. The server includes a thumbnail retrieval component that is configured to implement a method that involves receiving a request for a thumbnail image. The thumbnail image is embedded in an image file along with a corresponding main image. The thumbnail image is retrieved from an image host. The entire image file is not retrieved from the image host. The thumbnail image is sent to the client.

In some embodiments, retrieving the thumbnail image may involve identifying a location of the thumbnail image within the image file, and retrieving data from the image file corresponding to the location. Identifying the location of the thumbnail image may involve retrieving a first portion of the image file from the image host, and determining whether the first portion of the image file includes thumbnail location information. The thumbnail retrieval component may be selected from the group consisting of an Active Server Page, a Java Server Page, and a Common Gateway Interface script.

A set of executable instructions for implementing a method in a server is also disclosed. The method involves receiving a request for a thumbnail image. The thumbnail image is embedded in an image file along with a corresponding main image. The thumbnail image is retrieved from an image host. The entire image file is not retrieved from the image host. The thumbnail image is sent to the client.

Retrieving the thumbnail image may involve identifying a location of the thumbnail image within the image file, and retrieving data from the image file corresponding to the location. Identifying the location of the thumbnail image may involve retrieving a portion of the image file from the image host, and determining whether the portion of the image file includes thumbnail location information.

A method in a server for providing access to an embedded thumbnail image is also disclosed. A request is received from a client for a location of a thumbnail image. The thumbnail image is embedded in an image file along with a corresponding main image. Thumbnail location information is retrieved from an image host. The entire image file is not retrieved from the image host. The thumbnail location information is sent to the client.

Retrieving the thumbnail location information may involve retrieving a first portion of the image file from the image host, and determining whether the first portion of the image file includes the thumbnail location information. Retrieving the thumbnail location information may additionally involve retrieving a second portion of the image file from the image host if the first portion does not comprise the thumbnail location information. It may then be determined whether the second portion of the image file includes the thumbnail location information. The thumbnail location information may include an offset to the thumbnail image in the image file, and a size of the thumbnail image.

The image file may be in the exchangeable image file format (EXIF). The request may be received from the client and the thumbnail location information may be sent to the client in accordance with hypertext transfer protocol (HTTP). The thumbnail location information may be retrieved from the image host in accordance with hypertext transfer protocol (HTTP).

A method in a client for accessing an embedded thumbnail image is also disclosed. A request is sent to a server for a location of a thumbnail image. The thumbnail image is embedded in an image file along with a corresponding main image. Thumbnail location information is received from the server. The thumbnail location information is used to retrieve the thumbnail image from an image host. The entire image file is not retrieved from the image host.

The thumbnail location information may include an offset to the thumbnail image in the image file, and a size of the thumbnail image. The image file may be in the exchangeable image file format (EXIF). The request may be sent to the server and the thumbnail location information may be received from the server in accordance with hypertext transfer protocol (HTTP). In some embodiments, retrieving the thumbnail image from the image host may involve retrieving the bytes corresponding to the thumbnail image. The thumbnail image may be retrieved from the image host in accordance with hypertext transfer protocol (HTTP), and retrieving the bytes corresponding to the thumbnail image may involve using the byte-range feature of HTTP.

A method for providing access to an embedded thumbnail image is also disclosed. The method involves publishing a reference to a thumbnail image that is embedded in an image file along with a corresponding main image. A request is received from a client for the thumbnail image. The request includes the reference to the thumbnail image. The thumbnail image is retrieved from an image host. The entire image file is not retrieved from the image host. The thumbnail image is sent to the client.

A method in a server for providing access to an embedded thumbnail image is also disclosed. The method involves publishing a reference to a thumbnail image that is embedded in an image file along with a corresponding main image. A request is received from a client for a location of a thumbnail image. The request includes the reference to the thumbnail image. Thumbnail location information is retrieved from an image host. The entire image file is not retrieved from the image host. The thumbnail location information is sent to the client.

Various embodiments of the invention are now described with reference to the Figures, where like reference numbers indicate identical or functionally similar elements. It will be readily understood that the components of the present invention, as generally described and illustrated in the Figures herein, could be arranged and designed in a wide variety of different configurations. Thus, the following more detailed description of several exemplary embodiments of the present invention, as represented in the Figures, is not intended to limit the scope of the invention, as claimed, but is merely representative of the embodiments of the invention.

Those skilled in the art will appreciate that many features of the embodiments disclosed herein may be implemented as computer software, electronic hardware, or combinations of both. To clearly illustrate this interchangeability of hardware and software, various components will be described generally in terms of their functionality. Whether such functionality is implemented as hardware or software depends upon the particular application and design constraints imposed on the overall system. Skilled artisans may implement the described functionality in varying ways for each particular application, but such implementation decisions should not be interpreted as causing a departure from the scope of the present invention.

Where the described functionality is implemented as computer software, those skilled in the art will recognize that such software may include any type of computer instruction or computer executable code located within a memory device. Software that implements the functionality associated with components described herein may comprise a single instruction, or many instructions, and may be distributed over several different code segments, among different programs, and across several memory devices.

FIG. 1is a block diagram illustrating an exemplary system100in which some embodiments may be practiced. As shown, embodiments disclosed herein may involve interaction between a client102, a server104, and an image host106. In some embodiments, the client102may be a web browser, and the server104may be a web server.

An image file108is stored on the image host106. The image file108includes a main image110. In addition to the main image110, a thumbnail image112is embedded within the image file108. The thumbnail image112is a smaller representation of the main image110. The image file108also includes thumbnail location information114. The location information114specifies the location of the thumbnail image112within the image file108. For example, the location information114may include the offset to the beginning of the thumbnail image112as well as the size of the thumbnail image112.

In some embodiments, the image file108is in the exchangeable image file (EXIF) format. Image files108in the EXIF format typically include an image file directory (IFD). The location information114may be found in the IFD, and more specifically, within the JpegIFOffset tag (sometimes referred to as the JPEGInterchangeFormat tag) and the JpegIFByteCount tag (sometimes referred to as the JPEGInterchangeFormatLength tag) within the IFD. The JpegIFOffset tag indicates the offset to the thumbnail image112, and the JpegIFByteCount tag indicates the size of the thumbnail image112.

The client102and the server104may be in electronic communication with each other over one or more computer networks118a. Thus, data transmitted from the client102to the server104, and vice versa, may pass through one or more intermediate nodes en route to its destination. Similarly, the server104and the image host106may be in electronic communication with each other over one or more computer networks118b. Thus, data transmitted from the server104to the image host106, and vice versa, may pass through one or more intermediate nodes en route to its destination. The networks118a,118bmay be the same network118. Embodiments may be used in local area networks (LANs), storage area networks (SANs), metropolitan area networks (MANs), wide area networks (WANs), and combinations thereof (e.g., the Internet) with no requirement that the client102and the server104or the server104and the image host106reside in the same physical location, the same network118segment, or even in the same network118. A variety of different network configurations and protocols may be used, including Ethernet, TCP/IP, UDP/IP, IEEE 802.11, IEEE 802.16, Bluetooth, asynchronous transfer mode (ATM), fiber distributed data interface (FDDI), token ring, and so forth, including combinations thereof. Of course, some embodiments may also be practiced with conventional point-to-point connections, such as enterprise systems connection (ESCON), small computer system interface (SCSI), fiber channel, etc., that may not typically be viewed as a “network.”

FIG. 2is flow diagram illustrating an exemplary method200that may be performed by the thumbnail retrieval component116in the system100shown inFIG. 1. The order of the steps or actions of the method200is for illustrative purposes only and may be changed in alternative embodiments.

The method200begins when a client request for the thumbnail image112is received202. In some embodiments, the server104may publish a reference (e.g., a URL) to the image file108. In such embodiments, the client request may include the reference to the image file108, as well as some type of indication that the thumbnail image112is to be retrieved (as opposed to the main image110). Alternatively, the server104may publish a direct reference to the thumbnail image112, and the client request may include the direct reference to the thumbnail image112.

The location of the thumbnail image112within the image file108is then identified204. This step is typically accomplished by retrieving the location information114within the image file108. As discussed above, the location information114may include the offset to the beginning of the thumbnail image112and the size of the thumbnail image112. An exemplary method for retrieving the location information114will be described in greater detail below in connection withFIG. 3.

Once the location of the thumbnail image112has been identified204, the thumbnail image112is then retrieved206from the image host106. In other words, image file data corresponding to the location identified in step204is retrieved. In some embodiments, this may be done in accordance with the HTTP protocol using a byte-range request. The thumbnail image data to be retrieved may be specified by a range header in the byte-range request. After the thumbnail image112has been retrieved from the image host106, it is then sent208to the client102.

FIG. 3is flow diagram illustrating an exemplary method300for retrieving the location information114within the image file108. In other words,FIG. 3illustrates one exemplary way that step204of the method200shown inFIG. 2may be implemented. The order of the steps or actions of the method300is for illustrative purposes only and may be changed in alternative embodiments.

The method300begins when a request is sent302to the image host106for a portion of the image file108. For example, in some embodiments, a request is sent for the first N bytes of the image file108. The value of N may be specified in a user-configurable preferences file. A default value of N may be specified by the designer.

Once the requested portion of the image file108has been received304from the image host106, it is then determined306whether the location information114is included within the received portion of the image file108. If the portion of the image file108received in step304does include the location information114, the method300ends308.

If the received portion of the image file108does not include the location information114, the server104sends310a request to the image host106for a different portion of the image file108. For example, in some embodiments, a request is sent for the next N bytes of the image file108. The method300then returns to step304and proceeds as described above.

In other words, the method300involves continually retrieving different portions of the image file108until the location information114is obtained. The different portions of the image file108may be retrieved sequentially. For example, the first N bytes of the image file108may be retrieved initially. If this portion of the image file108does not include the location information114, the next N bytes of the image file108(i.e., bytes N+1to2N) may be retrieved. If this portion of the image file108does not include the location information114, the next N bytes of the image file108(i.e., bytes2N+1to3N) may be retrieved, and so on, until the location information114is obtained.

As stated above, the method300shown inFIG. 3illustrates one way that step204of the method200shown inFIG. 2may be implemented. Typically, once the location information114for the thumbnail image112has been identified, the thumbnail image112is then retrieved from the image host106, as discussed above.

FIG. 4is a signal flow diagram for the different components in the system100ofFIG. 1while the methods200,300ofFIGS. 2-3are being performed. As shown, the client102sends a request420for the thumbnail image112to the server104. In response, the thumbnail retrieval component116retrieves the thumbnail image112from the image host106and sends the thumbnail image112to the client102.

Retrieving the thumbnail image112from the image host106typically involves sending one or more requests422to the image host106for different portions of the image file108. As was discussed above, this may be done for the purpose of obtaining the location information116in the image file108, so that the location of the thumbnail image112within the image file108may be identified. In response to the requests422, the image host106sends the requested portions424of the image file108to the thumbnail retrieval component116.

Once the location of the thumbnail image112within the image file108is identified, the thumbnail retrieval component116sends a request426to the image host106for the thumbnail image112. In response to the request426, the image host106sends the thumbnail image112to the thumbnail retrieval component116.

Communication between the various components inFIG. 4may occur in accordance with the hypertext transfer protocol (HTTP), including HTTP version 1.1. Some examples of HTTP messages that may be exchanged between the various components will now be provided.

The following is an example of a request420that may be sent from the client102to the server104. In this example, the server104is using an Active Server Pages (ASP) technology.

An example of a request422that may be sent from the thumbnail retrieval component116to the image host106is now provided. The request422is for a portion of an image file108. More specifically, this request422may be sent in order to obtain the first N bytes of the image file108(N=2047 in this example).

An example of a response message that may be sent from the image host106to the thumbnail retrieval component116is now provided. The message includes the portion424of the image file108that was requested in the previous example.

As discussed previously, in some embodiments, when the first N bytes of the image file are received, the thumbnail retrieval component116determines whether the location information114is included therein. If the location information114is not included, the thumbnail retrieval component116sends another request422to the image host106for the next N bytes (bytes2048-4095in this example).

The next example corresponds to a request426that may be sent from the thumbnail retrieval component116to the image host106in order to obtain a thumbnail image112. The request typically includes the location of the thumbnail image112within the image file108. In this example, the thumbnail image112is located at bytes2024-7168within the image file108.

The next example corresponds to a response message that may be sent from the image host106to the thumbnail retrieval component116in response to the request426. The message includes the thumbnail image112. As in the previous example, the thumbnail image112is located at bytes2024-7168within the image file108.

The next example corresponds to a response message that may be sent from the server104to the client102. The message includes the thumbnail image112.

FIG. 5is a flow diagram illustrating another embodiment of a method500that may be performed by the thumbnail retrieval component116. In the embodiment shown inFIG. 5, the image file108is in EXIF format, and communication between the client102, server104, and image host106occurs in accordance with HTTP version 1.1. The order of the steps or actions of the method500is for illustrative purposes only and may be changed in alternative embodiments.

The method500begins when a client HTTP GET request is received502. The imageURL and imageMode are retrieved504from the HTTP GET request. An HTTP/1.1 byte-range request is sent506to the address corresponding to the imageURL. The byte-range in the request is set to a predetermined chunk size (N).

The HTTP byte-range response received from the image host106is parsed508. It is then determined510whether the JpegIFOffset and JpegIFByteCount tags are included in the received response. If not, the method500returns to step506and proceeds as described above.

If the JpegIFOffset and JpegIFByteCount tags are included in the received response, an HTTP/1.1 byte-range request is sent512to the address corresponding to the imageURL for thumbnail image data from the EXIF image. The ResponseContentType is set514to image/JPEG. The retrieved EXIF thumbnail data is sent516to the client102.

FIG. 6is a block diagram illustrating an alternative system600in which some embodiments may be practiced. In the system600shown inFIG. 6, the server604and the image host606are located on the same device605. The interactions between the client602, the thumbnail retrieval component616, and the server604may be as described above in connection withFIGS. 2-5.

FIG. 7is a block diagram illustrating the components typically utilized in a server704used with embodiments herein. The illustrated components may be logical or physical and may be implemented using any suitable combination of hardware, software, and/or firmware. In addition, the different components may be located within the same physical structure or in separate housings or structures.

The server704includes a processor706and memory708. The processor706controls the operation of the computer system and may be embodied as a microprocessor, a microcontroller, a digital signal processor (DSP) or other device known in the art. The processor706typically performs logical and arithmetic operations based on program instructions stored within the memory708.

As used herein, the term “memory”708is broadly defined as any electronic component capable of storing electronic information, and may be embodied as read only memory (ROM), random access memory (RAM), magnetic disk storage media, optical storage media, flash memory devices in RAM, on-board memory included with the processor706, EPROM memory, EEPROM memory, registers, etc. The memory708typically stores program instructions and other types of data. The program instructions may be executed by the processor706to implement some or all of the methods disclosed herein.

The server704typically also includes one or more communication interfaces710for communicating with other electronic devices. The communication interfaces710may be based on wired communication technology, wireless communication technology, or both. Examples of different types of communication interfaces710include a serial port, a parallel port, a Universal Serial Bus (USB), an Ethernet adapter, an IEEE 1394 bus interface, a small computer system interface (SCSI) bus interface, an infrared (IR) communication port, a Bluetooth wireless communication adapter, and so forth.

The server704typically also includes one or more input devices712and one or more output devices714. Examples of different kinds of input devices712include a keyboard, mouse, microphone, button, joystick, remote control device, trackball, touchpad, lightpen, etc. Examples of different kinds of output devices714include a speaker, printer, etc. One specific type of output device which is typically included in a computer system is a display device716. Display devices716used with embodiments disclosed herein may utilize any suitable image projection technology, such as a cathode ray tube (CRT), liquid crystal display (LCD), light-emitting diode (LED), gas plasma, electroluminescence, or the like. A display controller718may also be provided, for converting data stored in the memory708into text, graphics, and/or moving images (as appropriate) shown on the display device716.

Of course,FIG. 7illustrates only one possible configuration of a server704. Those skilled in the art will recognize that various other architectures and components may be utilized. In addition, various standard components are not illustrated in order to avoid obscuring aspects of the invention.

FIG. 8is a flow diagram illustrating another exemplary method800that may be performed by the different components in the system100shown inFIG. 1and/or the system600shown inFIG. 6. The order of the steps or actions of the method800is for illustrative purposes only and may be changed in alternative embodiments.

The method800begins when the client102sends802a request to the thumbnail retrieval component116for the location of a thumbnail image112within an image file108. The request typically includes an address for the image file108, such as a uniform resource locator (URL).

The thumbnail retrieval component116identifies804the location of the thumbnail image112within the image file108. This step is typically accomplished by retrieving the location information114within the image file108. As discussed above, the location information114may include the offset to the beginning of the thumbnail image112and the size of the thumbnail image112. In some embodiments, this step may be accomplished in accordance with the method300described above in connection withFIG. 3. The thumbnail retrieval component116communicates806the location of the thumbnail image112to the client102.

After receiving the location of the thumbnail image112from the thumbnail retrieval component116, the client102retrieves808the thumbnail image112directly from the image host106. In other words, the client102retrieves image file data from the image host106corresponding to the location received from the thumbnail retrieval component116in step806. In some embodiments, this may be done in accordance with the HTTP protocol using a byte-range request. The thumbnail image data to be retrieved may be specified by a range header in the byte-range request.

In an alternate embodiment some or all of the thumbnail retrieval component (116and/or616) may be inside the client (102and/or602).