ビットマップ画像を格納する 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;