Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2010, 10:20   #1
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию Jpeg или pnj

Как перед загрузкой картинки в image узнать её формат, что бы не пладить тома кода?

P.S. извеняюсь за ошибку, не pnj, а png

Посматрел как браузер опредиляит, так это по Response Headers, но как с ним работать в интернете не нашёл

Последний раз редактировалось bulldog5293; 26.11.2010 в 11:10.
bulldog5293 вне форума Ответить с цитированием
Старый 26.11.2010, 11:58   #2
grafgrial
Просто хороший
Форумчанин
 
Аватар для grafgrial
 
Регистрация: 26.03.2010
Сообщений: 562
По умолчанию

Есть content-type если он image/gif или же image/png то выполняй нужную опрерацию
Помог, нажми весы слева
grafgrial вне форума Ответить с цитированием
Старый 26.11.2010, 13:16   #3
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Цитата:
content-type
А как правельно его получить если не кодерский секрет?

Вообще, разве нельзя без content-type ведь браузер полюбому определяет формат по другому, хотя до этой минуты у меня были сомнения, но нашёл код определения формата картинки
Код:
function PhysicalResolveFileType(AStream: TStream): Integer; 
var 
  p: PChar; 
begin 
  Result := 0; 
  if not Assigned(AStream) then 
    Exit; 
  GetMem(p, 10); 
  try 
    AStream.Position := 0; 
    AStream.Read(p[0], 10); 
    {bitmap format} 
    if (p[0] = #66) and (p[1] = #77) then 
      Result := 1; 
    {tiff format} 
    if ((p[0] = #73) and (p[1] = #73) and (p[2] = #42) and (p[3] = #0)) or 
      ((p[0] = #77) and (p[1] = #77) and (p[2] = #42) and (p[3] = #0)) then 
      Result := 2; 
    {jpg format} 
    if (p[6] = #74) and (p[7] = #70) and (p[8] = #73) and (p[9] = #70) then 
      Result := 3; 
    {png format} 
    if (p[0] = #137) and (p[1] = #80) and (p[2] = #78) and (p[3] = #71) and 
      (p[4] = #13) and (p[5] = #10) and (p[6] = #26) and (p[7] = #10) then 
      Result := 4; 
    {dcx format} 
    if (p[0] = #177) and (p[1] = #104) and (p[2] = #222) and (p[3] = #58) then 
      Result := 5; 
    {pcx format} 
    if p[0] = #10 then 
      Result := 6; 
    {emf format} 
    if (p[0] = #215) and (p[1] = #205) and (p[2] = #198) and (p[3] = #154) then 
      Result := 7; 
    {emf format} 
    if (p[0] = #1) and (p[1] = #0) and (p[2] = #0) and (p[3] = #0) then 
      Result := 7; 
  finally 
    Freemem(p); 
  end; 
end; 

procedure TForm1.Button1Click(Sender: TObject);
var
  fs: TFileStream;
begin
   fs := TFileStream.Create( 'C:\test.bmp', fmOpenRead );
   case PhysicalResolveFileType( fs ) of
      1:  Caption := 'BMP';
      2:  Caption := 'TIFF';
      3:  Caption := 'JPG';
      4:  Caption := 'PNG';
      5:  Caption := 'DCX';
      6:  Caption := 'PCX';
      7:  Caption := 'EMF';
      8:  Caption := 'TGA';
      9:  Caption := 'ICO';
      10: Caption := 'GIF';
   end;
   fs.Free;
end;
Правда как его использовать в моём случае не пойму
Код:
        begin
          img := TMemoryStream.Create;
          png := TPNGObject.Create;
          HTTP_BUX.get('http://' + Url_Pay + 'image.php?', img);
          img.Position := 0;
          png.LoadFromStream(img);
          Form9.Image1.Picture.Assign(png);
          code := '';
          Synchronize(capcha);
          inf.Add('username=' + Login);
          inf.Add('password=' + Password);
          inf.Add('code=' + code);
          ain := HTTP_BUX.Post('http://' + Url_Pay + 'login.php', inf);
          вход := poster(ain);
          png.Free;
          inf.Free;
          img.Free;
        end;

procedure BUX.capcha;
begin
  code := TForm2.GetCapcha(png);
end;
Если не трудно подскажите

Ну мож сёдня кто ни буть подскажет

Последний раз редактировалось Stilet; 28.11.2010 в 19:54.
bulldog5293 вне форума Ответить с цитированием
Старый 28.11.2010, 19:56   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

С потолка в силу логики:
Код:
...
HTTP_BUX.get('http://' + Url_Pay + 'image.php?', img);
case PhysicalResolveFileType( img ) of
      1:  Caption := 'BMP';
      2:  Caption := 'TIFF';
      3:  Caption := 'JPG';
      4:  Caption := 'PNG';
      5:  Caption := 'DCX';
      6:  Caption := 'PCX';
      7:  Caption := 'EMF';
      8:  Caption := 'TGA';
      9:  Caption := 'ICO';
      10: Caption := 'GIF';
   end;
...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.11.2010, 21:00   #5
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Может проще

Код:
function GetContentFrmt(IdHTTP_: TIdHTTP): string;
var
  Buf :string;
  I :Integer;
begin
 Result := 'nil';
 Buf := Trim(IdHTTP_.Response.ContentType);
 if Pos('image', Buf) = 1 then
 begin
  I := Pos('/', Buf);
  Result := Copy(Buf, I + 1, MaxInt);
 end;
end;
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdCookieManager, IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent,
  IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit; // ваш URL
    Button1: TButton;
    IdHTTP1: TIdHTTP;
    IdAntiFreeze1: TIdAntiFreeze;
    IdCookieManager1: TIdCookieManager;
    Edit2: TEdit; // выодит тип сожержимого
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
   function GetContentFrmt(IdHTTP_ :TIdHTTP):string;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Button1.Enabled := False;
  try
 IdHTTP1.Head(Edit1.Text);
 Edit2.Text := GetContentFrmt(IdHTTP1);
  finally
 Button1.Enabled := True;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 With IdHTTP1.Request do
 begin
   Host := '';
   Referer := '';
   UserAgent := 'Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.6.30 Version/10.63';
   Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
   AcceptLanguage := 'ru,en-us;q=0.7,en;q=0.3';
   AcceptEncoding := 'gzip,deflate';
   AcceptCharSet := 'windows-1251,utf-8;q=0.7,*;q=0.7';
   Connection := 'keep-alive';
 end;
end;

function TForm1.GetContentFrmt(IdHTTP_: TIdHTTP): string;
var
  Buf :string;
  I :Integer;
begin
 Result := 'nil';
 Buf := Trim(IdHTTP_.Response.ContentType);
 if Pos('image', Buf) = 1 then
 begin
  I := Pos('/', Buf);
  Result := Copy(Buf, I + 1, MaxInt);
 end;
end;

end.
Alter вне форума Ответить с цитированием
Старый 28.11.2010, 22:48   #6
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Alter, спс, дальше буду думать над м.и.и.
bulldog5293 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Jpeg в RichView Shouldercannon Общие вопросы Delphi 0 29.04.2010 05:06
Jpeg warmbabe Общие вопросы по Java, Java SE, Kotlin 2 26.02.2010 20:14
Transparent color image если формат jpeg или jpg postal2 Компоненты Delphi 7 03.07.2009 12:14
Jpeg Артэс Win Api 1 29.11.2008 08:48
jpeg All517 БД в Delphi 15 22.11.2007 14:31