PHP - 免费下载乐拍通照片(中等清晰度)
尊重他人的劳动成果
乐园内聘请的摄影师都是较为专业的,具有一定的专业技能和拍摄技巧,使用的摄影设备也是较高级的,所有的这些都是为了能拍摄出优秀的照片,留下你在迪士尼乐园的美好瞬间,成为你一辈子的记忆。
本文只在与技术研究,还是希望大家通过正规渠道购买下载想要的照片。当然,如果以此牟利更是要严加抵制。
乐园内聘请的摄影师都是较为专业的,具有一定的专业技能和拍摄技巧,使用的摄影设备也是较高级的,所有的这些都是为了能拍摄出优秀的照片,留下你在迪士尼乐园的美好瞬间,成为你一辈子的记忆。
本文只在与技术研究,还是希望大家通过正规渠道购买下载想要的照片。当然,如果以此牟利更是要严加抵制。
一、乐拍通介绍
在迪士尼游玩时,如果我们同卡通人物合影,迪士尼摄影师会使用他们的单反相机免费为我们拍照。或者乘坐项目的时候,也会有一些官方摄影留下的照片。这些照片我们可以通过乐拍通APP或者乐拍通网站下载。
当然下载照片是要收费的:一张照片 59 元。或者花 369 购买乐拍通一卡通,可以无限制的下载照片。
二、淘宝上的乐拍通下载服务
想要下载照片,很多人觉得单张59不划算,打包369又贵了些。于是淘宝上催生了许多提供乐拍通照片下载服务的卖家,让我们可以使用比较实惠的价格得到所有的照片。根据价格不同,他们实现的方式主要分为如下两种:
1,120多元
这个是通过拼单实现的。由于一张一卡通可以同时绑定多张乐拍通卡,卖家那边有大量游客需要进行拼单,因此可以很迅速地找到合适的卡片。卖家那边拼单结束后,我们这边就能自行下载乐拍通卡内的所有高清相片的原图了。
- 卖家成本:每3人就需要一张一卡通
- 如何拿到照片:直接在官方App内下载(其实和我们自行购买是一样的)
- 照片质量:单反高清原图(像素4600x3450,约1~4MB大小)
2,30多元
这种就是本文要介绍的方法。其实拿到的就是宣传照片,也就是我们使用App预览时去掉表面覆盖的遮罩层,得到下方的宣传图,所以清晰度肯定很一般。
- 卖家成本:0
- 如何拿到照片:卖家下好照片后发到邮箱中。
- 照片质量:一般清晰(像素1024x768,约100KB大小)
三、免费下载照片教程
这里下载的是普通清晰度的照片,也就是上面说的淘宝卖30多块钱的那种。
1,准备工作
(1)设备我这里使用的是:一部 iPhone 手机,一台 Mac 电脑。
2,下载原始文件
(1)设置手机代理,让其所有的网络请求都能被 Charles 拦截。
(2)打开乐拍通,点击想要的照片,会发现 Charles 上有数据包出现,类似下面的包就是我们需要的照片(请求地址是 www.disneyphotopass.com.cn,大概大小 100k 左右)。右键save response 保存到本地(这些包我们后面还要处理下才是最终照片)。
(3)当然我们也可以先在手机上把所有照片点一遍,然后电脑上点文件夹统一保存下来。
3,文件转换
这些包内容由两部分组成,头部是是一张广告小图(我们要将其剔除)。后面剩余部分就是我们需要的真实图片。
(1)这里我使用 php 写了一个转换程序。
转换原理是先获取开头的标记(包数据的前三个字节),找到这个标记第二次出现的位置, 将从这个位置起一直到结束的部分给截取出来并保存。
<? //原始文件转换为图片 function convert($input) { $file_path = "input/".$input; //判断文件是否存在 if(file_exists($file_path)){ $fp = fopen($file_path,"r"); $str = fread($fp,filesize($file_path));//指定读取大小,这里把整个文件内容读取出来 //获取文件前三个字符 $head = substr($str,0,3); //获取这三个字符第二次出现的位置 $secondPos = strpos($str,$head,10); //截取剩余部分的内容 $out = substr($str,$secondPos); //生成文件 $myfile = fopen("output/".$input.".jpg", "w") or die("Unable to open file!"); fwrite($myfile, $out); fclose($myfile); echo "文件生成成功!"; } } //遍历input文件夹下的所有文件 $mydir = dir("input"); echo "<ul>\n"; while($file = $mydir->read()) { if( ($file!=".") AND ($file!="..")) { echo "<li>$file</li>\n"; //将原始文件转化为图片 convert($file); } } echo "</ul>\n"; $mydir->close(); ?>
将前面我们下下来的包放在 input 文件夹中。访问这个 php 文件,程序执行完毕后,最终的图片会保存到 output 文件夹中。
技术服务生活,很好很强大