file-type

Java实现的camera.swf图片处理功能

3星 · 超过75%的资源 | 下载需积分: 10 | 163KB | 更新于2025-04-04 | 102 浏览量 | 39 下载量 举报 1 收藏
download 立即下载
标题中提到的“camera.swf”和描述中提到的“java版本的图片操作”,以及“图片等比缩小和截取”和“同时生成大、中、小等三张图片”涉及了几个关键的IT知识点。首先,“camera.swf”表明这是一个使用了Flash技术的Shockwave文件。Flash是一种已经不再被主流浏览器支持的富互联网应用(RIA)技术,它主要用于创建动画和应用程序,但在移动设备上不被支持,且由于安全和性能等问题,多数现代桌面浏览器也已经停止了对其的支持。 描述中提到的“java版本的图片操作”可能指的是使用Java编程语言在后端服务器上对图片进行处理。Java是一种广泛用于企业级开发的语言,具备处理文件和图像的能力。图片等比缩小和截取操作通常需要对图像的像素数据进行处理,而Java提供了丰富的API,如AWT和Swing库中的Graphics类,可以用来在服务器端对上传的图片进行操作。 “同时生成大、中、小等三张图片”意味着处理后的图片需要有不同尺寸的版本,以适应不同的应用场景,例如网页显示、移动设备显示等。等比缩放图片时,需要保证图片的长宽比例不变,以避免图片变形。这通常涉及到计算原始图片尺寸与目标尺寸之间的比例,并据此重新计算像素点的位置。 在实现上述功能时,Java后端可能使用了图像处理库如Java ImageIO、Java Advanced Imaging(JAI)或第三方库,如Apache Commons Imaging或imgscalr等来处理图片。通过这些库提供的API,可以方便地读取、修改以及保存图片的尺寸和格式。 另外,【标签】中提到的“camera.swf”、“java上传图片”和“图片裁剪”进一步细化了知识点。在Java Web应用中,上传图片通常会使用到HTML的<form>标签配合<input type="file">来实现文件上传的功能。图片上传到服务器后,后端代码需要读取这个文件,并进行相应的处理。图片裁剪则是指在原始图片中选定一部分区域并进行提取,这在生成缩略图或者特定比例的图片时非常常见。 最后,“压缩包子文件的文件名称列表”提到的“swfupload2”,可能是指一个JavaScript库的名字,该库被用于前端实现Flash版本的文件上传功能。虽然Flash技术已不再被推荐使用,但有些旧系统可能仍然依赖于这类技术。而“包子”可能是一个误写,因为没有所谓的“压缩包子”技术或术语,这可能是文件名的一部分或是一个翻译错误。 综上所述,一个典型的图片处理系统可能会包含以下几个组件: 1. 前端文件上传组件(可能是一个名为swfupload2的JavaScript库)。 2. 后端Java代码,负责接收上传的图片文件。 3. 使用Java图像处理API或第三方库,对上传的图片执行等比缩小、截取、裁剪等操作。 4. 根据需要生成不同尺寸的图片版本,并保存到服务器的文件系统中。 需要注意的是,随着Web技术的发展,传统的Flash技术已被现代技术如HTML5, CSS3和JavaScript所取代。因此,即使上述知识点目前在一些遗留系统中仍然可用,但开发新系统时应考虑使用更为现代的技术栈。

相关推荐

filetype
本文参考UCenter中上传头像功能的剥离php版本,陆续实现了java版本和.net版本的。 具体介绍如下(以php为例,其他版本见源码) 本文的内容仅供技术交流学习之用,相关的代码并未考虑实际应用系统中所必需的用户身份验证等功能,同时由于 UCenter 发行许可的限制,请勿将本文附带的代码直接用于实际的产品或项目中。 Discuz! 和 UCHome 中的头像上传功能很好用,大概有不少人和我一样想弄清楚它是怎么实现的,甚至希望移植到自己的应用系统中。 这个功能其实是在 UCenter 中实现的(这是 Discuz! 和 UCHome 等其它相关产品都依赖的公共模块),通过一个 Flash 文件(camera.swf),跟服务端的 PHP 程序配合完成的。 UCenter/UCHome 本身是开源的,但那个 camera.swf 并没有提供源代码。我们可以通过对 PHP 程序进行分析研究,进而基本摸清这个功能操作的细节,并最终将其剥离出来,独立于 UCenter 而独立运行。本文内容依据的是 UCenter1.5.0/UCHome2.0 。 首先我们来看一下 UCenter/UCHome 中这个功能是怎么工作的。 ■ 基本步骤 0. 浏览器访问 UCHome 中的一个 web 页面,其中包含 camera.swf。为保证 camera.swf 能正常工作,在其相同的路径下需要有 locale.xml 文件。 装载 camera.swf 的 HTML 代码可以由下面的程序生成: home\uc_client\client.php : uc_avatar() 生成的内容大致如下: <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="447" height="477" id="mycamera" align="middle"> <param name="allowScriptAccess" value="always" /> <param name="scale" value="exactfit" /> <param name="wmode" value="transparent" /> <param name="quality" value="high" /> <param name="bgcolor" value="#ffffff" /> <param name="movie" value="http://localhost/center/images/camera.swf?inajax=1&appid=1&input=6b49vKhr%2FC4VpMIMCAt07Kr2eQk8jjY%2F6vtvDonod47dU7JK%2BxVFJPIVY%2FJGMQoSpzHylapBa8FbsEWFGorPwZDJRM10wGjxvbHKTVmVgrng%2BpoSTTsk%2BE3U&agent=a523e70c80e13e4eaee37c7f4bde4f2c&ucapi=https%3A%2F%2F2.zoppoz.workers.dev%3A443%2Fhttp%2Flocalhost%2Fcenter&avatartype=virtual" /> <param name="menu" value="false" /> <embed src="http://localhost/center/images/camera.swf?inajax=1&appid=1&input=6b49vKhr%2FC4VpMIMCAt07Kr2eQk8jjY%2F6vtvDonod47dU7JK%2BxVFJPIVY%2FJGMQoSpzHylapBa8FbsEWFGorPwZDJRM10wGjxvbHKTVmVgrng%2BpoSTTsk%2BE3U&agent=a523e70c80e13e4eaee37c7f4bde4f2c&ucapi=https%3A%2F%2F2.zoppoz.workers.dev%3A443%2Fhttp%2Flocalhost%2Fcenter&avatartype=virtual" quality="high" bgcolor="#ffffff" width="447" height="477" name="mycamera" align="middle" allowScriptAccess="always" allowFullScreen="false" scale="exactfit" wmode="transparent" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> </object> 参数分解如下: inajax 1 appid 1 input 6b49vKhr%2FC4VpMIMCAt07Kr2eQk8jjY%2F6vtvDonod47dU7JK%2BxVFJPIVY%2FJGMQoSpzHylapBa8FbsEWFGorPwZDJRM10wGjxvbHKTVmVgrng%2BpoSTTsk%2BE3U agent a523e70c80e13e4eaee37c7f4bde4f2c ucapi http://localhost/center avatartype virtual 其中的关键参数为 ucapi,后面两步 POST 的 URL 为 <ucapi>/index.php 这里的 "/index.php" 似乎是 hardcode 在 camera.swf 里的,不过在最后的程序代码中会看到,如果我们指定的 ucapi 明确给定了一个 php 文件的话,可以绕开 index.php 这个文件名。换句话说,如果服务端不是采用 PHP,而是另外一种编程语言的话(比如 Java/.NET 等),也是可以实现的。 1. 用户在 camera.swf 中“选择图片”后,camera.swf 会立刻把选中的图片上传到服务器。 $_SERVER REQUEST_URI /center/index.php?m=user&inajax=1&a=uploadavatar&appid=1&input=ca68o1L41a1HkbmhMJVGHu0oFjxYXwadnUT9HnFpnyz5AgiZcsVGecPP38w%2BwM7XtT79zC5WMWlH8T7LvluCSXS3YUsrcJDoD1ySILNO2xo63hmBAvXVX24f&agent=a523e70c80e13e4eaee37c7f4bde4f2c&avatartype=virtual METHOD POST $_GET m user inajax 1 a uploadavatar appid 1 input ca68o1L41a1HkbmhMJVGHu0oFjxYXwadnUT9HnFpnyz5AgiZcsVGecPP38w+wM7XtT79zC5WMWlH8T7LvluCSXS3YUsrcJDoD1ySILNO2xo63hmBAvXVX24f agent a523e70c80e13e4eaee37c7f4bde4f2c avatartype virtual $_POST Filename something.jpg Upload Submit Query $_FILES 图片文件内容 处理程序为: center\control\user.php : onuploadavatar() 程序返回的内容为保存该文件的临时位置,比如: http://localhost/center/data/tmp/upload5.jpg camera.swf 会通过上面这个网址来读取图片,显示供操作。还可以有以下返回值作为错误代码: -1 : Invalid identity! -2 : Invalid photograph! -3 : No photograph be upload! -4 : Can not write to the data/tmp folder! -5 : Server can not upload! 2. 用户在 camera.swf 中“确定”后,camera.swf 会向服务器上传 3 个图片数据,作为大、中、小尺寸的头像图片。 $_SERVER REQUEST_URI /center/index.php?m=user&inajax=1&a=rectavatar&appid=1&input=ca68o1L41a1HkbmhMJVGHu0oFjxYXwadnUT9HnFpnyz5AgiZcsVGecPP38w%2BwM7XtT79zC5WMWlH8T7LvluCSXS3YUsrcJDoD1ySILNO2xo63hmBAvXVX24f&agent=a523e70c80e13e4eaee37c7f4bde4f2c&avatartype=virtual&randomnumber=5478 METHOD POST $_GET m user inajax 1 a rectavatar appid 1 input ca68o1L41a1HkbmhMJVGHu0oFjxYXwadnUT9HnFpnyz5AgiZcsVGecPP38w+wM7XtT79zC5WMWlH8T7LvluCSXS3YUsrcJDoD1ySILNO2xo63hmBAvXVX24f agent a523e70c80e13e4eaee37c7f4bde4f2c avatartype virtual randomnumber 5478 $_POST avatar1 ... avatar3 ...<middle> avatar2 ... 处理程序为: center\control\user.php : onrectavatar() 程序的返回内容为: 成功时: <?xml version="1.0" ?><root><face success="1"/></root> 失败时: <root><message type="error" value="-1" /></root> 3. 上传完成后,如果 camera.swf 能找到名为 updateavatar() 的 Javascript function,就会调用它。 ■ 参数分析 在上面第 0 步生成的 HTML 中,指向 camera.swf 的 URL 携带了一些参数,其中最关键的是 ucapi,它决定了第 1 步和第 2 步的 HTTP Request 发往哪里。 其它几个都是 UCenter 应用系统所需要的参数。camera.swf 是专为 UCenter 设计的,所以它特别支持这几个参数值,也就是说,在访问 camera.swf 的 URL 里包含了什么值,在后续访问 ucapi 的时候就会原样传回来。 camera.swf 没有提供源代码,没办法改造,但并不妨碍我们使用它。比如,我们可以借用 input 这个参数,把自己应用程序所需要的自定义参数(比如 user id)统一编码装在这个值里。 ■ 剥离实现 搞清楚了功能操作的细节和参数含义,重新实现这个功能就很容易了。 所谓重新剥离实现,就是在直接借用 camera.swf/locale.xml 这两个文件的前提下,重新编写服务器端的处理程序,实现头像上传功能,脱离 UCenter 独立运行。 理论上任何服务端编程语言都可以,我这里只给出 PHP 的代码。 包含了三个程序文件: avatar.php -- 实现了上面“基本步骤”中提到的全部功能 camera.swf -- 提取自 UCenter locale.xml -- 提取自 UCenter 将这三个文件部署到 web server 上,然后访问 http://localhost/avatar.php 即可。还可以在 URL 上指定一个 uid 作为“用户标识”,比如 http://localhost/avatar.php?uid=5