function JpegStartsInBlob(PicField:TBlobField):integer;
   var
    ghy: TADOBlobstream;
    buffer:Word;
    hx: string;
   begin
    Result := -1;
    ghy := TADOBlobstream.Create(PicField, bmRead);
    try
     while (Result = -1) and (ghy.Position + 1 < ghy.Size) do
     begin
      ghy.ReadBuffer(buffer, 1);
      hx:=IntToHex(buffer, 2);
      if hx = 'FF' then begin
       ghy.ReadBuffer(buffer, 1);
       hx:=IntToHex(buffer, 2);
      if hx = 'D8' then Result := ghy.Position - 2
       else if hx = 'FF' then
             ghy.Position := ghy.Position-1;
      end; //if
     end; //while
     finally
      ghy.Free
     end;  //try
end;

解决方案 »

  1.   

    数据库中picfield是blob字段,以二进制流的方式存放着大的文件TADOBlobstream.Create(PicField, bmRead); 以只读的方式读取出来,
    while (Result = -1) and (ghy.Position + 1 < ghy.Size) do 逐个字节分析ghy.ReadBuffer(buffer, 1); 
    hx:=IntToHex(buffer, 2); 
    读取一个字节将其转换成十六进制字符串if hx = 'FF' then//如果是FF 
    begin 
      ghy.ReadBuffer(buffer, 1);//读取下一个字节 
      hx:=IntToHex(buffer, 2);//转换成十六进制字符串 
      if hx = 'D8' then//如果是D8,函数值就是当前位置后两个字节 
        Result := ghy.Position - 2 
      else 
        if hx = 'FF' then//如果是FF,函数值就是当前位置后一个字节
          ghy.Position := ghy.Position-1; 
    end; 
      

  2.   


     通過對JPG圖片的頭,FFD8來判斷JPG的,但好像代碼沒什麼大的用途。呵呵