Это для разработчика, если вы не разработчик, вы также можете проверить текущий тип страницы. Вы просто должны осмотреть конкретную страницу и увидеть тег body. Если тема создана с использованием основных правил WordPress, то в теге body есть классы, связанные со страницей или одной страницей. Эти классы могут включать тип сообщения, имя шаблона, имя файла, идентификатор страницы и многое другое.
Я нашел способ попроще! Он автоматически загружает файлы JPG / GIF / BMP и т. Д., Даже не зная / не проверяя формат файла, и конвертирует его соответственно. У меня это сработало отлично.
Поделиться здесь :)
Uses
Classes, ExtCtrls, Graphics, axCtrls;
Procedure TForm1.Button1Click(Sender: TObject);
Var
OleGraphic : TOleGraphic;
fs : TFileStream;
Source : TImage;
BMP : TBitmap;
Begin
Try
OleGraphic := TOleGraphic.Create; {The magic class!}
fs := TFileStream.Create('c:\testjpg.dat', fmOpenRead Or fmSharedenyNone);
OleGraphic.LoadFromStream(fs);
Source := Timage.Create(Nil);
Source.Picture.Assign(OleGraphic);
BMP := TBitmap.Create; {Converting to Bitmap}
bmp.Width := Source.Picture.Width;
bmp.Height := source.Picture.Height;
bmp.Canvas.Draw(0, 0, source.Picture.Graphic);
image1.Picture.Bitmap := bmp; {Show the bitmap on form}
Finally
fs.Free;
OleGraphic.Free;
Source.Free;
bmp.Free;
End;
End;
Вы не можете использовать TPicture.LoadFromFile
, если вы не знаете, какой формат имеет изображение, так как этот метод использует расширение файла, чтобы определить, какой из зарегистрированных изображений форматы необходимо загрузить. Есть причина, по которой нет подходящего метода TPicture.LoadFromStream
.
Внешняя библиотека, которая может проверять данные и определять графический формат во время выполнения, была бы лучшим решением. Вы можете использовать страницу efg в качестве отправной точки своего исследования.
Быстрое и грязное решение - попробовать несколько форматов, с которыми вам нужно работать, пока один из них не удастся:
function TryLoadPicture(const AFileName: string; APicture: TPicture): boolean;
const
GraphicClasses: array[0..3] of TGraphicClass = (
TBitmap, TJPEGImage, TGIFImage, TPngImage);
var
FileStr, MemStr: TStream;
ClassIndex: integer;
Graphic: TGraphic;
begin
Assert(APicture <> nil);
FileStr := TFileStream.Create('D:\Temp\img.dat', fmOpenRead);
try
MemStr := TMemoryStream.Create;
try
MemStr.CopyFrom(FileStr, FileStr.Size);
// try various
for ClassIndex := Low(GraphicClasses) to High(GraphicClasses) do begin
Graphic := GraphicClasses[ClassIndex].Create;
try
try
MemStr.Seek(0, soFromBeginning);
Graphic.LoadFromStream(MemStr);
APicture.Assign(Graphic);
Result := TRUE;
exit;
except
end;
finally
Graphic.Free;
end;
end;
finally
MemStr.Free;
end;
finally
FileStr.Free;
end;
Result := FALSE;
end;
Изменить:
В библиотеке GraphicEx есть пример convert , который использует
GraphicClass := FileFormatList.GraphicFromContent(...);
для определения графического формата. Это кажется очень похожим на способ VB6, о котором вы упомянули.
Delphi 2009 поставляется со встроенной поддержкой JPEG, BMP, GIF и PNG.
Для более ранних версий Delphi вам, возможно, потребуется найти сторонние реализации для PNG и GIF, но в Delphi 2009 вы просто добавляете блоки Jpeg
, pngimage
и GIFImg
в свой раздел uses.
Если файл имеет расширение, вы можете использовать следующий код, как отметили другие, TPicture.LoadFromFile смотрит на расширения, зарегистрированные унаследованными классами, чтобы определить, какое изображение загружать.
uses
Graphics, Jpeg, pngimage, GIFImg;
procedure TForm1.Button1Click(Sender: TObject);
var
Picture: TPicture;
Bitmap: TBitmap;
begin
Picture := TPicture.Create;
try
Picture.LoadFromFile('C:\imagedata.dat');
Bitmap := TBitmap.Create;
try
Bitmap.Width := Picture.Width;
Bitmap.Height := Picture.Height;
Bitmap.Canvas.Draw(0, 0, Picture.Graphic);
Bitmap.SaveToFile('C:\test.bmp');
finally
Bitmap.Free;
end;
finally
Picture.Free;
end;
end;
Если расширение файла неизвестно, один из методов - посмотреть первые несколько байтов, чтобы определить тип изображения.
procedure DetectImage(const InputFileName: string; BM: TBitmap);
var
FS: TFileStream;
FirstBytes: AnsiString;
Graphic: TGraphic;
begin
Graphic := nil;
FS := TFileStream.Create(InputFileName, fmOpenRead);
try
SetLength(FirstBytes, 8);
FS.Read(FirstBytes[1], 8);
if Copy(FirstBytes, 1, 2) = 'BM' then
begin
Graphic := TBitmap.Create;
end else
if FirstBytes = #137'PNG'#13#10#26#10 then
begin
Graphic := TPngImage.Create;
end else
if Copy(FirstBytes, 1, 3) = 'GIF' then
begin
Graphic := TGIFImage.Create;
end else
if Copy(FirstBytes, 1, 2) = #$FF#$D8 then
begin
Graphic := TJPEGImage.Create;
end;
if Assigned(Graphic) then
begin
try
FS.Seek(0, soFromBeginning);
Graphic.LoadFromStream(FS);
BM.Assign(Graphic);
except
end;
Graphic.Free;
end;
finally
FS.Free;
end;
end;