oracle中保存的照片存在两种格式:绝大多数为jpg,少部分为gif;
现在需要把所有的照片导出为jpg格式的文件。
问题:
1,如果区别当前记录的照片格式呢?
2,gif格式的照片如何保存为jpg格式的文件呢?

解决方案 »

  1.   

    晕,判断文件的后缀名不行吗?
    ExtractFileExt(FileName)
    行的话把后缀名改掉就行啦
      

  2.   

    关键是后缀名不代表真正的格式呀,再说了,数据库里哪有文件名呀
    我添加了 gifimage单元后,  t_jpeg:TJPEGImage;
      t_gif:TgifImage;                 //存储照片文件
                      if Copy(t_field.AsString,7,4)='JFIF' then  //JPEG
                      begin
                        t_jpeg:=TJPEGImage.Create;
                        try
                          t_jpeg.LoadFromStream(CreateBlobStream(t_field,bmRead));
                          t_jpeg.SaveToFile(path+'\'+FieldByName('IDNUMBER').AsString+'.JPG');
                        finally
                          t_jpeg.Free;
                        end;
                      end
                      else if Copy(t_field.AsString,1,3)='GIF' then  //GIF
                      begin
                        t_GIF:=TGIFImage.Create;
                        t_jpeg:=TJPEGImage.Create;
                        try
                          t_GIF.LoadFromStream(CreateBlobStream(t_field,bmRead));
                          t_jpeg.Assign(t_gif);
                          t_jpeg.SaveToFile(path+'\'+FieldByName('IDNUMBER').AsString+'.JPG');
                        finally
                          t_GIF.Free;
                          t_jpeg.Free;
                        end;t_jpeg.Assign(t_gif);  //提示错误:Cannot assign a TGIFImage to a TJPEGImage,什么原因呢
      

  3.   

    搞定了,哈哈t_jpeg.Assign(t_gif); ----〉                      t_Bitmap.Assign(t_gif);
                          t_jpeg.Assign(t_Bitmap);
      

  4.   

    GIF就两种,开头6个字节是GIF87a和GIF89a。
    从BlobStream装入之前判断一下,选择合适的对象类型来assign。
    当然还是要处理异常的,并不是有这个标记就肯定是正确的格式。
      

  5.   

    不管是哪一种,直接用GDI+把每一帧的图片读出来,然后Save为Jpg就OK了