Внимание! Эта штука не предназначена для размещения фото на нашем форуме и сайте самостоятельно!
Написал вот простую прогу для создания фотоальбомов. Замучился руками подправлять.
Комменты к своим фото Олега Козлова и, наконец, Вадима Жиборкина окончательно заставили прикрутить возможность добавлять комменты свыше 255 знаков
Версия 1.1 понимает GIF и PNG изображения, исправлена ошибка в CSS, изменен интерфейс.
История программы
Скачать постоянно обновляемую версию
Кому нужны исходники (а вдруг...) Пишите - вышлю. Писано на Delphi 7.
Вот одна из функций:
//создает в указанной директории уменьшенную копию файла оригинала
//с установленным форматом имени
procedure TForm1.ThumbnailPictureCreate(originfile,smalldir,owner: String;
id, width, height: Integer; k: Real=1.0);
var
jporigin, jpico:TJPEGImage;
pngorigin, pngico: TPNGObject;
giforigin, gifico:TGIFImage;
pictype: TPicType;
bmp:TBitmap;
begin
//определяем тип изображения оригинала
pictype:= GetPicType(originfile);
if pictype<>ptUNKNOWN
then
begin
//создаём промежуточные битовые изображения
jporigin:=TJPEGImage.Create;
jpico:=TJPEGImage.Create;
pngorigin:=TPNGObject.Create;
pngico:=TPNGObject.Create;
giforigin:=TGIFImage.Create;
gifico:=TGIFImage.Create;
bmp:=TBitmap.Create;
//назначаем ширину иконки
bmp.Width:= Round(width*k);
//загружаем jpg/png/gif
//определяем высоту иконки
case pictype of
ptJPEG:
begin
jporigin.LoadFromFile(originfile);
bmp.Height:= Round(jporigin.Height/(jporigin.Width/bmp.Width));
end;
ptPNG :
begin
pngorigin.LoadFromFile(originfile);
bmp.Height:= Round(pngorigin.Height/(pngorigin.Width/bmp.Width));
end;
ptGIF :
begin
giforigin.LoadFromFile(originfile);
bmp.Height:= Round(giforigin.Height/(giforigin.Width/bmp.Width));
end;
end;
//если "портретность" больше установленной...
if bmp.Height>height*k
then
//...то снизить ее до нормы
begin
//назначаем высоту иконки
bmp.Height:= Round(height*k);
//определяем ширину иконки
case pictype of
ptJPEG:
bmp.Width:=Round(jporigin.Width/(jporigin.Height/bmp.Height));
ptPNG :
bmp.Width:=Round(pngorigin.Width/(pngorigin.Height/bmp.Height));
ptGIF :
bmp.Width:=Round(giforigin.Width/(giforigin.Height/bmp.Height));
end;
end;
//оригинал to small bmp
//small bmp to smalljpg/smallpng/smallgif
//сохраняем в файл с установленным именем
case pictype of
ptJPEG:
begin
bmp.Canvas.StretchDraw(Rect(0,0, bmp.Width, bmp.Height), jporigin);
jpico.CompressionQuality:=50;
jpico.Compress;
jpico.Assign(bmp);
jpico.SaveToFile(ExtractFilePath(originfile)+'\'+smalldir+'\'+owner+
'_s_'+IntToStr(id)+'_'+ExtractFileName(originfile));
end;
ptPNG :
begin
bmp.Canvas.StretchDraw(Rect(0,0, bmp.Width, bmp.Height), pngorigin);
pngico.CompressionLevel:= 9;
pngico.InterlaceMethod:= imNone;
pngico.Assign(bmp);
pngico.SaveToFile(ExtractFilePath(originfile)+'\'+smalldir+'\'+owner+
'_s_'+IntToStr(id)+'_'+ExtractFileName(originfile));
end;
ptGIF :
begin
bmp.Canvas.StretchDraw(Rect(0,0, bmp.Width, bmp.Height), giforigin);
gifico.Assign(bmp);
gifico.SaveToFile(ExtractFilePath(originfile)+'\'+smalldir+'\'+owner+
'_s_'+IntToStr(id)+'_'+ExtractFileName(originfile));
end;
end;
//удаляем промежуточные битовые изображения
jporigin.Free;
jpico.Free;
pngorigin.Free;
pngico.Free;
giforigin.Free;
gifico.Free;
bmp.Free;
end
else
ShowMessage('Формат файла '+originfile+' не определен. Иконка не создана.');
end;