江门外贸网站建设网站设计如何自学

张小明 2026/1/9 7:19:43
江门外贸网站建设,网站设计如何自学,亚马逊alexa,装修设计师在哪里找目标与范围 将约 90MB 的 GIF 压缩到用户可控的目标体积#xff08;例如 --max-mb 10#xff09;在体积、清晰度、流畅度之间做平衡#xff0c;参数可调#xff08;分辨率、帧率、色彩数#xff09; 技术路线 使用 Python Pillow 读取/写入 GIF#xff08;与仓库中 writ…目标与范围将约 90MB 的 GIF 压缩到用户可控的目标体积例如--max-mb 10在体积、清晰度、流畅度之间做平衡参数可调分辨率、帧率、色彩数技术路线使用 Python Pillow 读取/写入 GIF与仓库中writerpillow一致避免额外依赖逐帧处理ImageSequence迭代帧、统一缩放、量化调色板、重写duration保存开启optimizeTrue并设置save_allTrue、disposal2以减少冗余数据压缩策略由轻到重渐进分辨率按--scale或--max-width/--max-height对所有帧统一缩放LANCZOS帧率按--target-fps对帧集合采样保持总时长基本不变通过调整每帧duration色彩数使用quantize将每帧降到128/64/32色必要时关闭抖动以进一步减小体积存储优化共享首帧调色板、optimizeTrue、disposal2减少重复像素记录自适应迭代若仍超出--max-mb依次降低色彩→降低帧率→进一步缩放直到达标程序设计新增脚本compress_gif.pyCLI 接口python compress_gif.py input.gif -o output.gif --max-mb 10 --scale 0.5 --fps 12 --colors 128仅给--max-mb时走自动模式按上述策略逐步压缩直至达标输出日志原/新大小、压缩比例、最终参数便于复现与调参依赖与环境依赖Pillow仓库已通过matplotlib的writerpillow间接使用环境Windows / Python 3.8不强制要求安装ffmpeg或gifsicle验证与评估使用你的 90MB GIF 实测打印压缩前后大小与关键参数确保肉眼观感可接受回归测试对draw_results_pareto.py生成的 GIF 进行压缩验证兼容性可选增强确认后可一并实现质量预设--preset {high,medium,low}映射到一组参数并行处理多进程量化以加速在 CPU 充足情况下外部工具检测到gifsicle时可选--use-gifsicle做二次优化交付物compress_gif.py脚本 简要 README 使用示例示例命令与压缩前后对比报告包含体积和主参数待确认的默认参数max_mb10、fps12、scale0.5、colors128如需不同目标体积或更高/更低质量告知我调整默认值后开始实现importargparseimportosimportmathimporttempfilefromPILimportImage,ImageSequencedef_resample_filter():try:returnImage.Resampling.LANCZOSexceptException:returnImage.LANCZOSdef_load_frames(input_path):imImage.open(input_path)frames[]durations[]forframeinImageSequence.Iterator(im):durationframe.info.get(duration,im.info.get(duration,100))ifframe.modein(RGBA,LA):bgImage.new(RGB,frame.size,(255,255,255))frameframe.convert(RGBA)bg.paste(frame,maskframe.split()[-1])framebgelse:frameframe.convert(RGB)frames.append(frame)durations.append(int(duration))iflen(durations)0:durations[100]*len(frames)returnframes,durationsdef_compute_fps(durations):ifnotdurations:return10.0avgsum(durations)/float(len(durations))ifavg0:return10.0return1000.0/avgdef_compute_scale(size,scale,max_width,max_height):w,hsize s1.0ifscaleisnotNone:smin(s,float(scale))ifmax_widthisnotNoneandw*smax_width:smin(s,float(max_width)/float(w))ifmax_heightisnotNoneandh*smax_height:smin(s,float(max_height)/float(h))smax(s,0.05)returnsdef_resize_frames(frames,scale,max_width,max_height):ifscaleisNoneandmax_widthisNoneandmax_heightisNone:returnframes resample_resample_filter()w0,h0frames[0].size s_compute_scale((w0,h0),scale,max_width,max_height)new_wmax(1,int(w0*s))new_hmax(1,int(h0*s))return[f.resize((new_w,new_h),resample)forfinframes]def_sample_frames(frames,durations,target_fps):iftarget_fpsisNone:returnframes,durations orig_fps_compute_fps(durations)iftarget_fpsorig_fps:returnframes,durations stepmax(1,int(math.ceil(orig_fps/float(target_fps))))new_frames[]new_durations[]acc0fori,(f,d)inenumerate(zip(frames,durations)):ifi%step0:new_frames.append(f)new_durations.append(accd)acc0else:accdifacc0andnew_durations:new_durations[-1]accreturnnew_frames,new_durationsdef_quantize_frames(frames,colors,dither):ifcolorsisNone:returnframes q[]d1ifditherelse0forfinframes:q.append(f.quantize(colorsint(colors),methodImage.MEDIANCUT,ditherd))returnqdef_save_gif(frames,durations,output_path):ifnotframes:raiseRuntimeError(no frames)firstframes[0]restframes[1:]iflen(frames)1else[]first.save(output_path,save_allTrue,append_imagesrest,optimizeTrue,durationdurations,loop0,disposal2)def_file_size_mb(path):returnos.path.getsize(path)/(1024.0*1024.0)defcompress_once(input_path,output_path,scaleNone,target_fpsNone,colorsNone,ditherTrue,max_widthNone,max_heightNone):frames,durations_load_frames(input_path)frames_resize_frames(frames,scale,max_width,max_height)frames,durations_sample_frames(frames,durations,target_fps)frames_quantize_frames(frames,colors,dither)_save_gif(frames,durations,output_path)return_file_size_mb(output_path)defcompress_auto(input_path,output_path,max_mb,init_scaleNone,init_fpsNone,init_colorsNone,ditherTrue,max_widthNone,max_heightNone):frames,durations_load_frames(input_path)orig_fps_compute_fps(durations)scaleinit_scaleifinit_scaleisnotNoneelse0.5colors_tiers[128,64,32,16]fps_tiers[12,10,8,6]colorsinit_colorsifinit_colorsisnotNoneelsecolors_tiers[0]fpsinit_fpsifinit_fpsisnotNoneelsemin(int(orig_fps),fps_tiers[0])tmp_pathNonetry:for_inrange(12):withtempfile.NamedTemporaryFile(suffix.gif,deleteFalse)ast:tmp_patht.name sizecompress_once(input_path,tmp_path,scalescale,target_fpsfps,colorscolors,ditherdither,max_widthmax_width,max_heightmax_height)ifsizemax_mb:os.replace(tmp_path,output_path)returnsize,{scale:scale,fps:fps,colors:colors,dither:dither}ifcolorscolors_tiers[-1]:forcincolors_tiers:ifcolorsc:colorscbreakcontinueiffpsfps_tiers[-1]:forfinfps_tiers:iffpsf:fpsfbreakcontinuescalemax(0.3,scale*0.85)os.replace(tmp_path,output_path)return_file_size_mb(output_path),{scale:scale,fps:fps,colors:colors,dither:dither}finally:iftmp_pathandos.path.exists(tmp_path):try:os.remove(tmp_path)exceptException:passdefgenerate_sample_gif(path):frames[]foriinrange(60):color((i*5)%255,128,(255-i*4)%255)frames.append(Image.new(RGB,(640,360),color))durations[50]*len(frames)frames[0].save(path,save_allTrue,append_imagesframes[1:],durationdurations,loop0,optimizeTrue,disposal2)defmain():pargparse.ArgumentParser()p.add_argument(input,nargs?,help输入 GIF 路径)p.add_argument(-o,--output,help输出 GIF 路径)p.add_argument(--max-mb,typefloat,defaultNone,help目标最大体积 MB)p.add_argument(--scale,typefloat,defaultNone,help缩放比例 0-1)p.add_argument(--fps,typeint,defaultNone,help目标帧率)p.add_argument(--colors,typeint,defaultNone,help色彩数量 256 以下)p.add_argument(--max-width,typeint,defaultNone,help最大宽度)p.add_argument(--max-height,typeint,defaultNone,help最大高度)p.add_argument(--no-dither,actionstore_true,help关闭抖动)p.add_argument(--self-test,actionstore_true,help生成示例 GIF 并压缩)argsp.parse_args()ifargs.self_test:test_inos.path.join(os.getcwd(),_sample.gif)test_outos.path.join(os.getcwd(),_sample_compressed.gif)generate_sample_gif(test_in)ifargs.max_mb:size,paramscompress_auto(test_in,test_out,max_mbfloat(args.max_mb),init_scaleargs.scale,init_fpsargs.fps,init_colorsargs.colors,dither(notargs.no_dither),max_widthargs.max_width,max_heightargs.max_height)else:sizecompress_once(test_in,test_out,scaleargs.scale,target_fpsargs.fps,colorsargs.colors,dither(notargs.no_dither),max_widthargs.max_width,max_heightargs.max_height)params{scale:args.scale,fps:args.fps,colors:args.colors,dither:(notargs.no_dither)}print(原始体积(MB),_file_size_mb(test_in))print(压缩体积(MB),size)print(参数,params)returnifnotargs.input:raiseSystemExit(缺少输入 GIF 路径或使用 --self-test)input_pathargs.inputoutput_pathargs.outputor(os.path.splitext(input_path)[0]_compressed.gif)ifargs.max_mbisnotNone:size,paramscompress_auto(input_path,output_path,max_mbfloat(args.max_mb),init_scaleargs.scale,init_fpsargs.fps,init_colorsargs.colors,dither(notargs.no_dither),max_widthargs.max_width,max_heightargs.max_height)print(原始体积(MB),_file_size_mb(input_path))print(压缩体积(MB),size)print(参数,params)print(输出,output_path)else:sizecompress_once(input_path,output_path,scaleargs.scale,target_fpsargs.fps,colorsargs.colors,dither(notargs.no_dither),max_widthargs.max_width,max_heightargs.max_height)print(原始体积(MB),_file_size_mb(input_path))print(压缩体积(MB),size)print(输出,output_path)if__name____main__:main()
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

金华手机网站建设网站流量统计模板

在全球人工智能加速迈入深水区的当下,行业竞争的底层逻辑正在发生变化。模型参数的规模不再是唯一焦点,算力是否可持续、基础软件是否可演进、技术体系是否掌握在自己手中,正在成为决定产业上限的关键因素。尤其是在国际技术环境日趋复杂的背…

张小明 2026/1/4 6:53:30 网站建设

普通网站制作响应式门户网站

多版本Keil共存实战:C51与MDK协同安装深度指南 在嵌入式开发的日常中,你是否曾遇到这样的窘境——手头既要维护一个老旧但仍在产的8051项目,又要同步推进基于STM32的新产品设计?打开电脑,却发现Keil只能“二选一”&am…

张小明 2026/1/3 19:04:17 网站建设

rio门户网站的制作天津seo

OhMyZsh终端主题终极指南:从入门到精通的全方位配置方案 【免费下载链接】ohmyzsh 项目地址: https://gitcode.com/gh_mirrors/ohmy/ohmyzsh 在命令行开发环境中,一个精心设计的终端主题不仅仅是视觉装饰,更是提升工作效率的重要工具…

张小明 2026/1/3 14:16:54 网站建设

it培训机构网站开发自己怎样用手机建网站

城通网盘极速下载实战指南:3种场景下的高效解决方案 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 还在为城通网盘下载速度缓慢而烦恼吗?想要快速获取工作资料、学习资源却总是…

张小明 2026/1/3 19:34:33 网站建设

网站建设合同是否交印花税个人网站涉及企业内容

基于Comsol的管内两相流流型模拟的算例(泡状流和弹状流),可在此基础上熟悉管内泡状流和弹状流的模拟方法,分析其规律。 以下为水平管、竖直管、倾斜管以及基于气泡流模型的管内气液两相流模拟部分结果。两相流模拟总带着点玄学色彩…

张小明 2026/1/4 12:40:45 网站建设

服务器网站慢的原因百度小程序开发者工具

Perl 与 Python 编程入门指南 1. Perl 编程基础 在 Linux 系统中,Perl 是一种强大的脚本语言。下面是一个 Perl 代码示例: $ ls -la | perl -nae ‘print “$F[8] is $F[4]\n” if $F[4] > 10000;’这个命令的含义如下: - -n 开关:表示要对输出的每一行运行 Perl …

张小明 2026/1/6 3:07:30 网站建设