修正png
这是修正+取MD5的方法
function MD5FileTextPng(filename: AnsiString): AnsiString;
var
buf: array[..MAX_PATH - ] of Char;
path: AnsiString;
stream: TFileStream;
destStream: TMemoryStream;
destfile, tmpText: string;
I, len: Integer;
endbuf: array[..] of Byte;
firstChar: Byte;
strstream: TStringStream;
const
pngEndBuf: array[..] of Byte = ($AE, $, $, $);
begin
GetTempPath(Length(buf), @buf[]);
path := AnsiString(string(buf));
tmpText := ExtractFileName(filename);
tmpText := Copy(tmpText, , Length(tmpText) - ); strstream := TStringStream.Create(tmpText, TEncoding.UTF8);
strstream.Position := ; stream := TFileStream.Create(filename, fmOpenRead);
try
destStream := TMemoryStream.Create;
try
stream.Position := ;
for I := to stream.Size - do
begin
stream.Read(firstChar, );
if firstChar <> $AE then
Continue;
stream.Position := stream.Position - ;
stream.Read(endbuf[], );
if CompareMem(@endbuf[], @pngEndBuf[], ) then
begin
len := stream.Position;
Break;
end;
end; stream.Position := ;
destStream.CopyFrom(stream, len); destfile := path + '\' + GetRamdomText();
if FileExists(destfile) then
DeleteFile(destfile); destStream.CopyFrom(strstream, strstream.Size);
destStream.SaveToFile(destfile);
strstream.Free; Result := MD5F(destfile);
finally
destStream.Free;
end;
finally
stream.Free;
end; if FileExists(destfile) then
DeleteFile(destfile);
end;
这是批量修正PNG的代码,pas + dfm
uFixpng.pas
unit uFixpng; interface uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, uMD5, Vcl.StdCtrls, Vcl.FileCtrl,
System.IOUtils, System.Types, Vcl.Samples.Gauges; type
TForm2 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Label1: TLabel;
Gauge1: TGauge;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Edit1DblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form2: TForm2; implementation {$R *.dfm} function FixPng(filename: AnsiString; destFileName: string): Boolean;
var
stream: TFileStream;
destStream: TMemoryStream;
I, len: Integer;
endbuf: array[..] of Byte;
firstChar: Byte;
const
pngEndBuf: array[..] of Byte = ($AE, $, $, $);
begin
stream := TFileStream.Create(filename, fmOpenRead);
try
destStream := TMemoryStream.Create;
try
stream.Position := ;
for I := to stream.Size - do
begin
stream.Read(firstChar, );
if firstChar <> $AE then Continue;
stream.Position := stream.Position - ;
stream.Read(endbuf[], );
if CompareMem(@endbuf[], @pngEndBuf[], ) then
begin
len := stream.Position;
Break;
end;
end; stream.Position := ;
destStream.CopyFrom(stream, len);
destStream.SaveToFile(destFileName);
finally
destStream.Free;
end;
finally
stream.Free;
end; Result := True;
end; procedure TForm2.Button1Click(Sender: TObject);
var
files: TStringDynArray;
path, destPath, destFile: string;
I: Integer;
begin
TButton(Sender).Enabled := False;
Gauge1.Visible := True;
try
path := Trim(Edit1.Text);
if not TDirectory.Exists(path) then Exit; files := TDirectory.GetFiles(path, '*.png'); destPath := TPath.Combine(path, 'Fix-' + FormatDateTime('hhnnss', Now)); if not TDirectory.Exists(destPath) then
TDirectory.CreateDirectory(destPath); Gauge1.Progress := ;
Gauge1.MinValue := ;
Gauge1.MaxValue := Length(files);
for I := Low(files) to High(files) do
begin
destFile := TPath.Combine(destPath, ExtractFileName(files[I]));
FixPng(files[I], destFile);
Gauge1.Progress := Gauge1.Progress + ;
Application.ProcessMessages;
end;
finally
TButton(Sender).Enabled := True;
Gauge1.Visible := False;
end;
end; procedure TForm2.Edit1DblClick(Sender: TObject);
var
path: string;
begin
SelectDirectory('选择png文件夹', '', path);
Edit1.Text := path;
end; procedure TForm2.FormCreate(Sender: TObject);
begin
Position := poScreenCenter;
end; end.
uFixpng.dfm
object Form2: TForm2
Left =
Top =
Caption = ##'png'
ClientHeight =
ClientWidth =
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch =
TextHeight =
object Label1: TLabel
Left =
Top =
Width =
Height =
Caption = 'PNG'####
end
object Gauge1: TGauge
Left =
Top =
Width =
Height =
Align = alBottom
Color = clNavy
ParentColor = False
Progress =
ShowText = False
Visible = False
end
object Edit1: TEdit
Left =
Top =
Width =
Height =
TabOrder =
OnDblClick = Edit1DblClick
end
object Button1: TButton
Left =
Top =
Width =
Height =
Caption = ####
TabOrder =
OnClick = Button1Click
end
end
修正png的更多相关文章
- [修正] Firemonkey 中英文混排折行问题(移动平台)
问题:FMX 在移动平台的文字显示并非由该平台的原生 API 来显示,而是由 FMX.TextLayout.GPU 来处理,也许是官方没留意到中文字符的问题,造成在中英文混排折行时,有些问题. 适用: ...
- [修正] Firemonkey Android 显示 Emoji (颜文字)
问题:在 Android 平台下,显示 Emoji 文字,无法显示彩色(皆为黑色),例如 Edit 控件,即使将 Edit.ControlType = Platform 设为平台原生控件,还是没用(真 ...
- 2016 正确 sublime安装PHPcs PHPcodesniffer代码规范提示插件,修正网上部分不详细描述
对你有助请点赞,请顶,不好请踩------送人玫瑰,手留余香!-------------------14:37 2016/3/212016 正确 sublime安装PHPcs PHPcodesniff ...
- Mint Linux 安装 DotnetCore 遭遇无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系
evlon@evlon-ThinkPad-T530 ~ $ apt install dotnet-dev-1.0.0-preview2-003121 正在读取软件包列表... 完成 正在分析软件包的依 ...
- 修正IE6不支持position:fixed的bug(转)
众所周知IE6不支持position:fixed,这个bug与IE6的双倍margin和不支持PNG透明等bug一样臭名昭著.前些天我做自己的博客模板的时候,遇到了这个问题.当时就简单的无视了IE6— ...
- [修正] 移动平台曲线不平滑的问题(如:TRectangle, TPath...等)
问题:从 XE4 以来,Firemonkey 曲线绘图在移动平台不平滑的问题一直令人诟病,提交到官方的 QC 也是族繁不及备载,官方似乎有意的避开这个问题,迟迟没有修正. 适用版本:XE4 ~ Ber ...
- [修正] Firemonkey TSelection 控件等比缩放时,左下角拉动问题
说明:TSelection 控件,当在属性 Proportional = True 为等比缩放时,拉动左下角,右上角会跟着移动. 适用:Berlin 10.1.1 (或之前版本) Firemonkey ...
- [修正] Berlin Firemonkey Windows 控件左方显示虚线问题
说明:在 Wndows 显示时,有时控件左方会显示一条虚线 适用:Berlin Firemonkey 修正方法: 请将源码 FMX.Platform.Win.pas 复制到自己的工程目录里,再进行修改 ...
- 查看数据库表的数据量和SIZE大小的脚本修正
在使用桦仔的分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)的脚本时,遇到下面一些错误 这个是因为这些表的Schema是Maint,而不是默认的dbo,造成下面这段SQ ...
- WordPress基础:Gravatar头像修正
WordPress会根据你的邮箱,从Gravatar获取你的头像,如果没有在Gravatar设置头像,将使用默认的,然而设置了之后显示还可能会出现以下问题: Gravatar头像读取困难,将影响网站读 ...
随机推荐
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 排版:设定小文本
<!DOCTYPE html> <html> <head> <title>菜鸟教程(runoob.com)</title> <meta ...
- 实用类-<Math类常用>
Math.random() //取0~1之间的随机数(不包括1) Math.max(数字1,数字2) //取两个数中最大的一个 Math.min(数字1,数字2) //取两个数中最小的一个 Math. ...
- mac下安装并启动RabbitMQ
前言 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件).RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的 ...
- 134、Java中的构造方法和构造块
01.代码如下: package TIANPAN; class Book { public Book() { // 构造方法 System.out.println("[A]Book类的构造方 ...
- 中山普及Day13——普及
又是迷之自信的说...估的230,考的50整,我欲上天呐!!! T1:深渊(怕不是黑暗种族聚集地???) 思路:动归.而且是简单动归.转移方程:Fi,j=max(Fi-1,j,Fi,j,Fi-1,(j ...
- Python Web 框架原理
Web Socket 所谓 Web 服务,本质上就是用户使用一个 socket 客户端(浏览器)去访问一个 socket 服务端. 下面是一个最基础的基于 socket 的 Python Web 服务 ...
- redis之string数据类型常用方法总结
目录 redis 字符串(string)[需要掌握] 特点 语法 redis 字符串(string)[需要掌握] 特点 一个键能存储512MB数据 string类型是二进制安全的,可以存储任何数据,比 ...
- 对于java多态的总结
父类引用指向子类对象是Java比较基础的概念.Java作为一门面向对象编程的语言,调用对象是在编程中经常用到的.尚学堂李老师为大家详细说明这一概念. 例如父类Animal,子类Cat,Dog.其中An ...
- GeoDa绘制疫情地图
刚学习GeoDa,菜鸟,目前还不能在地图上显示省市名称,求教. 看到丁香医生发布的疫情地图,我也尝试做一下,不过我的shp文件上只有中国大陆的31个省市. 数据来源于丁香医生,截至时间为 2020.1 ...
- centos 虚拟机安装调试
service network restart reboot yum update -y cd /etccd sysconfigcd network-scripts[root@u0mo5 networ ...