<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>-Flyぁ梦- &#187; Python</title>
	<atom:link href="http://blog.11034.org/category/coding/python/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.11034.org</link>
	<description></description>
	<lastBuildDate>Sun, 22 Jun 2025 08:59:05 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>Python和Java处理图片缩放，C#友情支持</title>
		<link>http://blog.11034.org/2010-11/image_resize_in_java_and_python.html</link>
		<comments>http://blog.11034.org/2010-11/image_resize_in_java_and_python.html#comments</comments>
		<pubDate>Sat, 27 Nov 2010 11:15:02 +0000</pubDate>
		<dc:creator><![CDATA[-Flyぁ梦-]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[百度]]></category>
		<category><![CDATA[Csharp]]></category>
		<category><![CDATA[PIL]]></category>
		<category><![CDATA[图片处理]]></category>

		<guid isPermaLink="false">http://blog.stariy.info/?p=590</guid>
		<description><![CDATA[终于又是周末，昨天居然把笔记本电源和鼠标忘在公司了，也好，今天就到公司玩吧，有暖气舒服，虽然没有晚饭吃，靠前几 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>终于又是周末，昨天居然把笔记本电源和鼠标忘在公司了，也好，今天就到公司玩吧，有暖气舒服，虽然没有晚饭吃，靠前几天抢来的一些零食充饥&#8230;回去吃方便面~</p>
<p>正题，我经常游玩，用数码相机拍不少照片，都是4000 * 3000大小的，然后一般会挑选不错的上传的人人网上，这么大的照片传的太慢，先自己处理到800 * 600再上传，速度会快很多，于是就有了这个idea。<span id="more-590"></span></p>
<p>一开始用Java写了一个，JavaSE还真没接触过关于处理图片，基本就是靠百度啦，资料还是不少的。主要用的java.awt.Image，java.awt.image.BufferedImage和javax.imageio包里面的几个IO接口实现的，实现缩放图片，以jpg为例：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">Image</span> image <span style="color: #339933;">=</span> ImageIO.<span style="color: #006633;">read</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">InputStream</span> is<span style="color: #009900;">&#41;</span>
<span style="color: #000066; font-weight: bold;">int</span> width <span style="color: #339933;">=</span> image.<span style="color: #006633;">getWidth</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">int</span> height <span style="color: #339933;">=</span> image.<span style="color: #006633;">getHeight</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
newWidth, newHeight <span style="color: #339933;">=</span> someFunction<span style="color: #009900;">&#40;</span>width, height<span style="color: #009900;">&#41;</span>
<span style="color: #003399;">BufferedImage</span> bufferedImage <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">BufferedImage</span><span style="color: #009900;">&#40;</span>newWidth, newHeight,
	<span style="color: #003399;">BufferedImage</span>.<span style="color: #006633;">TYPE_INT_RGB</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
bufferedImage.<span style="color: #006633;">getGraphics</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">drawImage</span><span style="color: #009900;">&#40;</span>
	image.<span style="color: #006633;">getScaledInstance</span><span style="color: #009900;">&#40;</span>newWidth, newHeight,
		<span style="color: #003399;">Image</span>.<span style="color: #006633;">SCALE_SMOOTH</span><span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
ImageIO.<span style="color: #006633;">write</span><span style="color: #009900;">&#40;</span>bufferedImage, <span style="color: #0000ff;">&quot;JPEG&quot;</span>, <span style="color: #003399;">OutputStream</span> os<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>运行效率：<strong>52</strong>张图片，每张图片平均大小：<strong>2.7M</strong>，共耗时：<strong>2分10秒</strong>，平均一张耗时：<strong>2.6秒</strong></p>
<p>今天用Python的Image Library（即PIL）写了一下，试着比较看看，代码如下：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="python" style="font-family:monospace;">im <span style="color: #66cc66;">=</span> Image.<span style="color: #008000;">open</span><span style="color: black;">&#40;</span>imagePath<span style="color: black;">&#41;</span>
w<span style="color: #66cc66;">,</span> h <span style="color: #66cc66;">=</span> im.<span style="color: black;">getbbox</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span>:<span style="color: black;">&#93;</span>
width<span style="color: #66cc66;">,</span> height<span style="color: #66cc66;">=</span> someFunction<span style="color: black;">&#40;</span>w<span style="color: #66cc66;">,</span> h<span style="color: black;">&#41;</span>
im <span style="color: #66cc66;">=</span> im.<span style="color: black;">resize</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>width<span style="color: #66cc66;">,</span> height<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
im.<span style="color: black;">save</span><span style="color: black;">&#40;</span>newPath<span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>很明显的，Python的代码精简轻巧，的确是一个亮点。当然最关心的还是运行效率了，结果大大出乎我的意料，Python以大优势获胜</p>
<p>运行效率：<strong>52</strong>张图片，每张图片平均大小<strong>：2.7M</strong>，共耗时：<strong>23秒</strong>，平均一张耗时：<strong>0.45秒</strong></p>
<p>再从图片效果上看，Java版缩略图比Python版平均一张图片要小10KB左右，差了不多，一张图片基本在100KB左右，图片效果上Python版的要比Java版的更加清晰一点，比较明显的，当然因为压缩后的锯齿什么的也同时清晰了= =</p>
<p>可以说在效果上基本平分秋色，Java以大小换效果，Python更注重图片效果，但是在处理速度上毫无疑问Python获胜。简单分析下原因：Java用的方法估计太烂，用的是基本都快被抛弃的awt包，或许有其他方法或专业的第三方库会好得多，而同时Python基本上可以说是官方统一的图片处理库，重视度就不一样；另一方便，这段程序明显是IO主要型的，Java基于虚拟机这一机制注定在IO上是悲剧的，好比写某些ACM你一个scanner扫描一遍就超时了，而Python，从Perl这样的字符串处理语言发展过来，以脚本为擅长，IO性能必然优秀。</p>
<p>总的感觉，拿着Java的劣势在拼Python的优势，不能因此就BS Java哈，偶们Java注重的是业务逻辑，是计算！不过也从另外一方面说明的Python的强大，不仅在于编程，效率和效果也相当不错！不知道C和C++又会是怎样的结果，当然编程的复杂是必须的，LZ不擅长也不会 = =</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-2010-11-30 感谢Madog提供C#代码&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>本来以为C#这么庞大的类似Java的感觉，会比Java快但或许会比Python慢，试了一下出乎意料了。环境是Win7 + VS2008。</p>
<p>先贴代码，C#的也很精简方便，基本就靠一个System.Drawing.Bitmap就搞定了，C#很强大啊！</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;">Bitmap srcBmp <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Bitmap<span style="color: #008000;">&#40;</span>srcPath<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #6666cc; font-weight: bold;">int</span> newHeight <span style="color: #008000;">=</span> srcBmp<span style="color: #008000;">.</span><span style="color: #0000FF;">Height</span> <span style="color: #008000;">*</span> newWidth <span style="color: #008000;">/</span> srcBmp<span style="color: #008000;">.</span><span style="color: #0000FF;">Width</span><span style="color: #008000;">;</span>
Bitmap bmp <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Bitmap<span style="color: #008000;">&#40;</span>srcBmp, newWidth, newHeight<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
bmp<span style="color: #008000;">.</span><span style="color: #0000FF;">Save</span><span style="color: #008000;">&#40;</span>dstPath, ImageFormat<span style="color: #008000;">.</span><span style="color: #0000FF;">Jpeg</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span></pre></td></tr></table></div>

<p>运行效率：<strong>52</strong>张图片，每张图片平均大小<strong>：2.7M</strong>，也耗时<strong>23秒</strong>，速度与Python持平，默认处理图像效果与Java差不多，压缩率比较大，图片大小比Python的小一些，不过这个在程序中可以自己控制，这儿就按默认处理了。</p>
<p>总结一下：<br />
效率： Python = C# &gt; Java<br />
压缩后相同像素图片的大小：Python &gt; C# = Java<br />
压缩后相同像素图片的清晰度：Python &gt; C# = Java</p>
<h4  class="related_post_title">随便看一看</h4><ul class="related_post"><li>2012-10-01 -- <a target="_blank" href="http://blog.11034.org/2012-10/hashmap_concurrent_bug.html" title="HashMap多线程中引发的死循环">HashMap多线程中引发的死循环</a></li><li>2016-06-06 -- <a target="_blank" href="http://blog.11034.org/2016-06/tomcat_https.html" title="Tomcat启用https服务">Tomcat启用https服务</a></li><li>2023-06-20 -- <a target="_blank" href="http://blog.11034.org/2023-06/chongqing.html" title="23.6山城重庆游">23.6山城重庆游</a></li><li>2011-01-20 -- <a target="_blank" href="http://blog.11034.org/2011-01/go_home_in_snow.html" title="春运回家，大雪揪心">春运回家，大雪揪心</a></li><li>2010-11-17 -- <a target="_blank" href="http://blog.11034.org/2010-11/python2x_first_impression.html" title="Python2.x的第一印象">Python2.x的第一印象</a></li></ul><h4 class="related_post_title">看看 Java , Python , 百度 </h4><ul class="related_post"><li>2010-12-24 -- <a target="_blank" href="http://blog.11034.org/2010-12/java_scriptengine.html" title="Java用ScriptEngine解析脚本">Java用ScriptEngine解析脚本</a></li><li>2010-11-17 -- <a target="_blank" href="http://blog.11034.org/2010-11/python2x_first_impression.html" title="Python2.x的第一印象">Python2.x的第一印象</a></li><li>2016-09-09 -- <a target="_blank" href="http://blog.11034.org/2016-09/64bits_linux_arena_memory.html" title="64位Linux下Java进程堆外内存迷之64M问题">64位Linux下Java进程堆外内存迷之64M问题</a></li><li>2016-08-18 -- <a target="_blank" href="http://blog.11034.org/2016-08/java_concurrency_in_practice.html" title="读java concurrency in practice">读java concurrency in practice</a></li><li>2016-08-05 -- <a target="_blank" href="http://blog.11034.org/2016-08/thread_stop.html" title="线程清理">线程清理</a></li>]]></content:encoded>
			<wfw:commentRss>http://blog.11034.org/2010-11/image_resize_in_java_and_python.html/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Python2.x的第一印象</title>
		<link>http://blog.11034.org/2010-11/python2x_first_impression.html</link>
		<comments>http://blog.11034.org/2010-11/python2x_first_impression.html#comments</comments>
		<pubDate>Wed, 17 Nov 2010 14:48:24 +0000</pubDate>
		<dc:creator><![CDATA[-Flyぁ梦-]]></dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[百度]]></category>
		<category><![CDATA[oop]]></category>

		<guid isPermaLink="false">http://blog.stariy.info/?p=575</guid>
		<description><![CDATA[来百度实习整3周了，很幸运，没有从事C++的工作而是写Python，一来是因为自从对Java抛出橄榄枝后就对C [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>来百度实习整3周了，很幸运，没有从事C++的工作而是写Python，一来是因为自从对Java抛出橄榄枝后就对C++的语法和OO方面各种BS，当然做算法除外，二来有幸能在实习阶段学习自己一直很想学的Python，的确是一件好事。Python也接触几周了，爽和不爽都有那么一点，也谈不上哪方面更占上风，毕竟骨子里已经被Java各种渗透了，熟悉新语言总会带着一点比较，有点偏见了。<span id="more-575"></span></p>
<p>因为本来比较熟的是Java和PHP，可以说基本都是以做Web为擅长的语言。Java丰富多彩，但基于JVM这个复杂的东西让它很不适合开发一个方便快捷的程序，尤其是偏桌面的，PHP就不用说了，完全的Web语言，没有浏览器就无用武之地了。相对于这个组合，C++其实是一个很好的补充，作为桌面开发，但因为以上说的原因就算了，还有C#，上过课用过一段时间，功能很强大但是很微软，.NET神马的还是算了。于是Python似乎是一个很好的补充，它简单方便，双击就能运行，Web也很强，而且像百度、Google这样的公司都大量使用Python，对以后找工作也很有帮助。</p>
<ul>
<li>语法</li>
</ul>
<p>Python最有名的莫过于强制缩进的语法风格了，这点我很欣赏，在Eclipse我手写Java就和format后的代码几乎无异，就是长句换行麻烦了点。稍微比较不习惯的就是经典的大括号被去掉了，据说是为了去除括号的N种风格，现在看到函数的结尾，尤其是一个类的结尾就没有一点标志（不然会有个‘}’嘛），太不爽了，当一个类长了的时候，而且当一个文件中有2个类的时候，很难找到类到底在哪儿结束。</p>
<ul>
<li>关键字</li>
</ul>
<p>Python的关键字有点别出心裁的感觉，try catch它来个try except，else if变成elif（貌似有的语言也这样），this改为self（PHP倒也是这样），def（喜欢其他脚本语言的function）。我有个想法，最好ISO出个编程语言关键字统一版本，关键字取名一样，怎么编译和解释是每个语言的各自的事，这样多好啊，切换一门语言的时候都不会太累。</p>
<ul>
<li>命名规范</li>
</ul>
<p>不知道是不是Python接触的还不够多，总感觉Python没有一套很明确的命名规范，既不是Java的驼峰式，也不是C的下划线隔开式，也不是微软的大写开头式，import导入的很多也是小写打头的，很容易混乱，然后变量取名不能随便取，像list、dict这些type类型，导入time包后的time，都会发生程序异常。这一点也因为Python的变量很随意，不像强语言，也不像PHP那样带$符号。</p>
<ul>
<li>OOP</li>
</ul>
<p>其实OOP接触的还不多，毕竟还没怎么实践，但是从书上看来，的确令我不爽。Python的OO是不符合OO标准的，它有C++的多重继承，对private的修饰如此纠结（函数名前加下划线），还有没有new关键字&#8230;。还有是对field没有明确申明，你可以实例化任何一个类，然后给它添加任何你自己的field属性，比较无语&#8230;还有貌似类内部引用自己类的静态变量居然要用类名来索引，如果改类名的话，代码要大动。</p>
<ul>
<li>pythonic</li>
</ul>
<p>感觉Python主义者都会很强调这个，Python说不定还真是因为有这个信仰一样的精神指导才能发展如此迅猛，基本大多数条目我都赞同，并且都是放之四海皆准的编程真理，也推荐ITer能好好参悟之，但惟独一条弃用tab键缩进而改用4个空格，理由很强势，不同os或文本编辑器对tab解释不同导致代码眼观起来差别很大，的确如此，不过敲一个键变成敲四个键，还是每行代码都要打的语法规定，对于Python这样极力于精简的语言来说，算是个什么事呢？</p>
<p style="padding-left: 30px;">pythonic的条目见：<a title="/2010-08/first_day_overtime.html" href="/2010-08/first_day_overtime.html" target="_blank">http://blog.11034.org/2010-08/first_day_overtime.html</a></p>
<p>好像都在说我对Python的不好的感觉，呵呵，Python的好处自然不言而喻啦，开头也有说过一点，各种方便各种库的支持，无所不能，Java代码十几行Python往往一个API就搞定，当然脚本语言一般都这样。不过听串叔一席话：Java怎么也是有一个大公司在支撑的15年+的语言，Python的核心毕竟只是少数人虽然年份也久了但总感觉是新语言，这点不知道会不会影响Python的良好发展。</p>
<h4  class="related_post_title">看看 oop</h4><ul class="related_post"><li>2014-07-07 -- <a target="_blank" href="http://blog.11034.org/2014-07/ruby_on_rails.html" title="ruby on rails">ruby on rails</a></li><li>2012-12-06 -- <a target="_blank" href="http://blog.11034.org/2012-12/ac_automachine.html" title="一个OOP的AC自动机代码">一个OOP的AC自动机代码</a></li><li>2012-03-22 -- <a target="_blank" href="http://blog.11034.org/2012-03/java_util_collections.html" title="java.util中的集合类解析">java.util中的集合类解析</a></li><li>2010-09-29 -- <a target="_blank" href="http://blog.11034.org/2010-09/wp-sns-share_add_tinyurl.html" title="wp-sns-share-1.2，增加tinyurl功能">wp-sns-share-1.2，增加tinyurl功能</a></li></ul><h4 class="related_post_title">看看 Python , 百度 </h4><ul class="related_post"><li>2010-11-27 -- <a target="_blank" href="http://blog.11034.org/2010-11/image_resize_in_java_and_python.html" title="Python和Java处理图片缩放，C#友情支持">Python和Java处理图片缩放，C#友情支持</a></li><li>2011-07-29 -- <a target="_blank" href="http://blog.11034.org/2011-07/baidu_mobads_online.html" title="第一个线上产品，百度移动应用联盟">第一个线上产品，百度移动应用联盟</a></li><li>2011-05-21 -- <a target="_blank" href="http://blog.11034.org/2011-05/baidu_back_to_zju.html" title="百度归，于浙大华诞114年">百度归，于浙大华诞114年</a></li><li>2011-03-10 -- <a target="_blank" href="http://blog.11034.org/2011-03/algo_p8880t.html" title="百度年会三等奖：爱国者P8880T">百度年会三等奖：爱国者P8880T</a></li><li>2011-03-01 -- <a target="_blank" href="http://blog.11034.org/2011-03/hello_shanghai_twice.html" title="再一次来到了上海">再一次来到了上海</a></li>]]></content:encoded>
			<wfw:commentRss>http://blog.11034.org/2010-11/python2x_first_impression.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
