前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >把吃灰的kindle变成黑白电子相框

把吃灰的kindle变成黑白电子相框

原创
作者头像
黄希彤
修改2022-11-29 11:11:45
1.1K0
修改2022-11-29 11:11:45
举报
文章被收录于专栏:黄希彤的专栏黄希彤的专栏

看到kindle即将退出中国市场的新闻,才想起来多年前部门抽奖发过几台paper white还在角落里吃灰,拿出来充上电发现还工作良好,似乎除了压泡面还能干些别的,比如用来显示黑白老照片?

要把kindle变成电子相框需要解决几个小问题:

1 让kindle不自动熄屏

kindle如果没越狱没刷diy系统的话,是会10来分钟就熄屏的。不过如果同时也没升级过固件的话,那么老固件是支持在搜索框里面输入指令“~ds”来实现Disable Screensaver也就是关闭锁屏的。

2 裁剪图片。pw的分辨率是1024*768,不过想要全屏显示的话需要把照片制作成电子书。如果要走浏览器路线的话,由于浏览器不支持全屏显示,实际显示区域就只有890*750大小了。为了实现最佳显示效果并同时实现流量或者电子书尺寸的最小化,最好把图片根据自己的需要进行一下批量裁剪压缩。这里我使用了由于不需要其他复杂的图片操作能力,这里我采用了最轻量的图片处理工具images,把input目录里的所有图片先伸缩到长宽之一满幅另一个超出画幅,然后把超出画幅的一边做居中裁剪。以下代码同时裁剪了横幅和竖幅两组图片。最后可以按需要使用其中一组。

代码语言:javascript
复制
const images = require("images"),fs=require("fs");
const portraitHeight=890,portraitWidth=750,landscapeHeight=portraitWidth,landscapeWidth=portraitHeight;
let org,w,h;
let path = "../input";
let outputPath = "../output";
if(fs.existsSync(outputPath+"/portrait")) fs.rmSync(outputPath+"/portrait",{recursive:true})
if(fs.existsSync(outputPath+"/landscape")) fs.rmSync(outputPath+"/landscape",{recursive:true})
fs.mkdirSync(outputPath+"/portrait")
fs.mkdirSync(outputPath+"/landscape")


let fileList = fs.readdirSync(path);
fileList.forEach(fineName=>{
	org = images(path+"/"+fineName);
	let {width,height}=org.size();
	//竖幅
	w = Math.max(portraitWidth,width*portraitHeight/height);
	h = Math.max(portraitHeight,height*portraitWidth/width);
	images(org.size(w),(w-portraitWidth)/2,(h-portraitHeight)/2,portraitWidth,portraitHeight).save(outputPath+"/portrait/"+fineName,{quality:50})
//横幅
	w = Math.max(landscapeWidth,width*landscapeHeight/height);
	h = Math.max(landscapeHeight,height*landscapeWidth/width);
	images(org.size(w),(w-landscapeWidth)/2,(h-landscapeHeight)/2,landscapeWidth,landscapeHeight).save(outputPath+"/landscape/"+fineName,{quality:70})
})

3 生成电子书

上网百度的话会告诉你把图片都传到各种收费平台上去制作,或者去word、wps上整什么花活儿。其实程序员要干这么点小事还是很简单的:

代码语言:javascript
复制
const { PDFDocument } =require('pdf-lib');
const fs = require('fs');
const path = "../output/portrait";
let fileList,iterator,pdfDoc;
async function readImg(){
	let n = iterator.next()
	if(!n.done){
		let jpgImage = await pdfDoc.embedJpg(fs.readFileSync(path+"/"+n.value))
		pdfDoc.addPage().drawImage(jpgImage, {
		  x: 0,
		  y: 0,
		  width: jpgImage.width,
		  height: jpgImage.height,
		})
		readImg();
	}else{
		const pdfBytes = await pdfDoc.save()
		fs.writeFileSync("portrait.pdf",pdfBytes)
	}
}
(async()=>{
	pdfDoc = await PDFDocument.create();
	fileList = fs.readdirSync(path);
	iterator= fileList[Symbol.iterator]();
	readImg()
})()

把一个目录的图片都读出来,一个图片一页往一个pdf丢就行了。不过好像只有部分kindle版本支持自动翻页。如果手头的kindle不支持自动翻页的话,还可以用原生浏览器来实现:

3’ 把图片上传到云端,然后用kindle原生浏览器访问,这样就可以让更多人一起欣赏自己搜集的照片了,但是也容易带来一些流量成本。这是另一个话题了。可以用kindle pw原生浏览器直接访问 http://kindle.sou.ac.cn 看看我搜集的照片(由于某些技术原因,尽量不要使用https)。

4 效果

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图片处理
图片处理(Image Processing,IP)是由腾讯云数据万象提供的丰富的图片处理服务,广泛应用于腾讯内部各产品。支持对腾讯云对象存储 COS 或第三方源的图片进行处理,提供基础处理能力(图片裁剪、转格式、缩放、打水印等)、图片瘦身能力(Guetzli 压缩、AVIF 转码压缩)、盲水印版权保护能力,同时支持先进的图像 AI 功能(图像增强、图像标签、图像评分、图像修复、商品抠图等),满足多种业务场景下的图片处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档