ビットマップ画像を格納する MySQL テーブルがあり、それらを同じテーブルの JPEG 形式に変換したいと考えています。誰でも解決策を見つけるのを手伝ってもらえますか?
テーブルのサイズを小さくするためにこれが必要です...
ビットマップ画像を格納する MySQL テーブルがあり、それらを同じテーブルの JPEG 形式に変換したいと考えています。誰でも解決策を見つけるのを手伝ってもらえますか?
テーブルのサイズを小さくするためにこれが必要です...
ADO を使用して MySQL データベースにアクセスすると、次のようになります (テストされていません)。このコードは、操作したい as という名前のテーブルとYourTable
、画像を as に変換する BLOB フィールドがあることを前提としていますImageField
。オブジェクトのConnectionString
プロパティで、DB への接続文字列を指定する必要があることに注意してください。ADOConnection
uses
DB, ADODB, JPEG;
procedure ConvertImage(BlobField: TBlobField);
var
BMPImage: TBitmap;
JPEGImage: TJPEGImage;
MemoryStream: TMemoryStream;
begin
MemoryStream := TMemoryStream.Create;
try
BlobField.SaveToStream(MemoryStream);
BMPImage := TBitmap.Create;
try
MemoryStream.Position := 0;
BMPImage.LoadFromStream(MemoryStream);
JPEGImage := TJPEGImage.Create;
try
JPEGImage.Assign(BMPImage);
MemoryStream.Position := 0;
JPEGImage.SaveToStream(MemoryStream);
finally
JPEGImage.Free;
end;
finally
BMPImage.Free;
end;
MemoryStream.Position := 0;
BlobField.LoadFromStream(MemoryStream);
finally
MemoryStream.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ADOTable: TADOTable;
ADOConnection: TADOConnection;
begin
ADOConnection := TADOConnection.Create(nil);
try
ADOConnection.LoginPrompt := False;
// here you have to specify the connection string to your database
// according to your connection parameters
ADOConnection.ConnectionString := '<enter your connection string here>';
ADOConnection.Open;
if ADOConnection.Connected then
begin
ADOTable := TADOTable.Create(nil);
try
ADOTable.Connection := ADOConnection;
ADOTable.TableName := 'YourTable';
ADOTable.Filter := 'ImageField IS NOT NULL';
ADOTable.Filtered := True;
ADOTable.CursorType := ctOpenForwardOnly;
ADOTable.Open;
ADOTable.First;
while not ADOTable.Eof do
begin
ADOTable.Edit;
ConvertImage(TBlobField(ADOTable.FieldByName('ImageField')));
ADOTable.Post;
ADOTable.Next;
end;
finally
ADOTable.Free;
end;
end;
finally
ADOConnection.Free;
end;
end;