分类 时间轴 下的文章

前段时间我去爬山,回来写了文章:朱雀国家森林公园痛苦一日游
上传图片的时候发现当前时代的浏览器并不支持浏览HEIF格式的图片,但是这一标准在苹果和许多较新安卓设备上都已经开始推广,并且压缩率不错,所以能不能想办法让浏览器显示HEIF格式的图片呢?

找到所需开源项目:

hoppergee/heic-to Convert HEIC/HEIF images to JPEG, PNG in browser
我的需求显然早就有人在做了,这个项目利用javascript提供了一个在前端将HEIF格式图片转换成jpeg/png的方案。

引用heic-to

工作原理:

  1. 自动检测所有带有.heic或.HEIC扩展名的图片
  2. 使用fetch API获取原始HEIC文件
  3. 在浏览器中转换为JPEG格式
  4. 替换图片的src属性显示转换后的图片
<script type="module">
// 导入CSP安全版本的HEIC转换模块 需要支持ES6特性
import { heicTo } from 'https://cdn.jsdelivr.net/npm/[email protected]/dist/csp/heic-to.js';

document.addEventListener('DOMContentLoaded', async function() {
    // 检查浏览器是否支持所需API
    if (!window.fetch || !window.URL || !window.Blob) {
        console.warn('浏览器不支持HEIC转换所需API');
        return;
    }
    
    // 处理HEIC图片转换
    async function processHEICImages() {
        const images = document.querySelectorAll('img[src$=".heic"], img[src$=".HEIC"]');
        if (images.length === 0) return;
        
        console.log(`找到 ${images.length} 张HEIC图片,开始转换...`);
        
        for (const img of images) {
            const src = img.src;
            const originalAlt = img.alt || '';
            const originalClass = img.className;
            
            try {
                // 添加加载状态
                img.alt = 'HEIC图片转换中...';
                img.classList.add('heic-loading');
                
                // 获取HEIC文件
                const response = await fetch(src);
                if (!response.ok) throw new Error(`HTTP错误! 状态码: ${response.status}`);
                
                const blob = await response.blob();
                
                // 转换为JPEG
                const jpegBlob = await heicTo({
                    blob: blob,
                    type: "image/jpeg",
                    quality: 0.8
                });
                
                // 创建对象URL并替换
                const jpegUrl = URL.createObjectURL(jpegBlob);
                img.onload = function() {
                    URL.revokeObjectURL(jpegUrl); // 释放内存
                    img.classList.remove('heic-loading');
                    img.classList.add('heic-converted');
                };
                img.src = jpegUrl;
                img.alt = originalAlt;
                img.className = originalClass;

            } catch (err) {
                console.error('HEIC转换失败:', err);
                img.alt = originalAlt + ' [HEIC转换失败]';
                img.classList.remove('heic-loading');
                img.classList.add('heic-error');
            }
        }
    }
    
    await processHEICImages();
});
</script>

<style>
.heic-loading {
    position: relative;
    min-height: 100px;
    background: #f5f5f5 url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><circle cx="50" cy="50" r="40" stroke="%233498db" stroke-width="8" fill="none" stroke-dasharray="62.8 188.8"><animateTransform attributeName="transform" type="rotate" repeatCount="indefinite" dur="1s" values="0 50 50;360 50 50" keyTimes="0;1"></animateTransform></circle></svg>') no-repeat center;
    background-size: 50px;
}
.heic-converted {
    border: 2px solid #2ecc71;
}
.heic-error {
    border: 2px dashed #e74c3c;
}
</style>

使用方法:

你可以引用上面的代码到任意html页面,通常我们把他放在header或footer里。
在Typecho上我们可以把它放在主题文件的: header.php 中

本文代码已在Github以MIT协议开源,感谢自由软件与开源社区!
DisplayMyHEIC

测试图片

测试图片1-人物
测试图片2-缆车

claw.cloud 以仅通过发送邮件的方式向包括我在内的众多用户宣布关闭香港地区的大部分业务,并提供了迁移方案,但是原有服务器可用时间截至到7月31日。很不幸,当我意识到服务器不对劲的时候,一切已经晚了。
我不知道能否完全恢复数据,但目前来看多半是没戏。
目前本博客通过yandex网页快照和互联网档案馆(https://web.archive.org/)手动复制恢复了大部分文章,但许多长文内容残缺不全仅有开头,关键段落及图像格式排版全部丢失,此事完全结束后,我会向互联网档案馆捐款以表感谢。

在此我只能奉劝各位数据上云的同学,及时备份。

如果此次数据丢失在和客服交涉后无法完全恢复,我的所有站点服务数据将永不上云,云服务仅限用于转发。

此次事件不涉及邮件服务器。

=-=本来不想去的,但是工友盛情难却还是在周六窜出去了。
爬山,累得半死,回来肌肉酸痛那叫一个酸爽。当然,出于被忽悠去爬山的报复心理,我拉着他俩不坐缆车硬腿上去,又腿下来,只有临走的时候时间太晚了我也懒得折腾了才花20块钱买了张景区内的载客观光车加速回到起点。
不知道当时脑子是不是在厂里干活干多了坏掉了,出去的时候没提前做防晒,戴着鸭舌帽穿着短T就冲了。
回来发现裸露的肢体直接就是一个晒伤,皮肤红的跟大虾一样,一接触阳光或外力刺激就有刺痛感。
就在写本文的时候又感觉胳膊晒伤的位置瘙痒难耐,可能是皮肤组织的炎症反应。
罢了罢了,吃点维生素C+复合B硬抗吧,自限性疾病又没什么特效药...唉。

8月5日

洗澡的时候发现胳膊晒伤的区域起皮了,看来损伤的皮肤正在缓慢修复。

照片

我GFPGAN1.4修复2025-08-07T09:19:28.png
工友拍的有点难绷,以后一定要自己买个大疆好拍照,只有自己才知道自己想拍成什么样。
下面是我拍的。
场内车票
下面是一张HEIC图片,根据在博客上无障碍浏览HEIC/HEIF图片我已经给博客添加了用于转换HEIF格式到浏览器可显示的图片格式的代码,理论上你可以在大部分现代浏览器上浏览下面这张图片。
两位工友-HEIC测试图片
由于Chromium目前还不支持HEIC图片所以你可能需要下载才能看。不过,你可以通过我的NAS浏览这些照片。
NAS预览
密码xfox.fun

既要有菩萨心肠,也要有雷霆手段。 这句话我第一次听,但是意思一样的话我听过很多。
上海出租车司机拒退19岁小伙错付的1010元车费,小伙报警无果(警方仅提供车牌号)最终喝下敌敌畏自杀。
这件事暴露出两个问题:

素质教育只教素质不教做人

只教人遵纪守法,不教人树纪立法。
基层警务渎职问题普遍存在

通过车牌号警方完全有能力在几分钟内就调出车主信息,一个电话过去要求退款不要太简单。
畸形的素质教育背后是只教半句的老师
既要有菩萨心肠,也要有雷霆手段。及格的老师会教你前半句,让你多体谅别人,少生事端。
优秀的老师会教你后半句,让你攥起拳头擡起胳膊对不公平不合理说不以便维护自身权益。

坦白来说,素质教育的畸形也构成了一种筛选,被“维稳优先“流水线规训成功的人遇到问题往往是吃一堑接着然后再吃一堑,这时候又有两种情况:精神内耗/情绪洪泛。 前者就是窝囊自杀的小伙,后者就是刀刀入肉的破防打工人。
没有被规训成功的倒是更知道要利用一切可利用的维护自身权利了,这样的人既怕死,又怕侵犯自身权益的人不死。
情绪洪泛伤及自身的人是可怜的,精神内耗的人是可悲的,但作为一个打工人从旁观者角度看,我宁可世上多些破防的可怜人杀一儆百也不想到处是可悲的窝囊废助长不法气焰。
当然,如果有的选,又一定要二选一我希望大家面临不公之时都是不被规训成功的人,尽可能合理合法的解决问题不要伤及自身。

宿舍里中暑死掉的老大爷,吃着含铅颜料染色食物的孩子和老师。捂嘴的有形大手,愤怒而无力的平民,讨要自己应得工资的工人。
​这就是我们生活的时代,一个礼崩乐坏又恰好信息传播迅速,网络审查严苛,造就翻墙群体众多,内忧难解而比下有余。
​或不屑,或愤怒,或得利或失去权利。
​红色信仰渐褪远去,什么颜色会成为新的象征?
宣传与实践的反差,是撕破假大空教育遮羞布的利刃。

上个月看到M5就想买了,但是当时又觉得真的想学画画完全可以鼠绘,最终就放弃了下单。
昨晚又突然想起来这件事和曾经试图学习绘画的经历,果断直接下单。

两次放弃与逃避
我还记得小时候曾经主动提出要学画画但最终都虎头蛇尾。
其中一次,我依稀记得无法接受自己被束缚在那个狭小的画室里不能随时回家玩,也对前几天枯燥的画线条感到无趣乏味最终提出放弃了。
另一次,应该还是那个画室学习素描吧,别人都是带齐装备,画板,笔自备,纸似乎画室当堂会发一张。第一次去的时候画室老师当着家长面不好敷衍,也确实给我找来了一张公用画板,后来自己去上课便没有这待遇了,自己找也没有找到。而我最终,只得到了家长以画室有画板可以用的搪塞,最终只得拿着买好的铅笔去了那么几次。
坐在一群自带画板的学生中间,弱小而无助。
回家嗷嗷哭,还要被骂自己要学又不学了。

昨晚就这样回想起这些痛苦的记忆片段,我忽然感觉自己很可悲,我终究是习得了父母的吝啬,甚至有时候自己对自己都如此吝啬,早在中学就想要现在却又舍不得买一个139.64包邮的数位板,甚至自己给自己找理由搪塞自己。
请朋友吃饭,几百块钱随便就付了。给喜欢的女孩买零食也没手软过,可到了为了自己兴趣爱好的时候还要如此斤斤计较自我搪塞。那我活着究竟为了什么?为了和自己的父母一样搪塞自己,搪塞后辈得过且过吗?
既然选择生活下去进入社会参加工作,为什么舍不得对自己好一些?
当然值得自我表扬的是,我从没停止在IT软硬件上持续投入金钱和时间,包括本博客和Linux用户站的服务器,域名,X99,3060laptop及12G Vram改装。🤣
参加工作换取报酬不应该为了别人,首先应该为了自己更快乐。――――――取悦自己
我相信爱自己,舍得给自己的兴趣爱好(包括曾经希望拥有的兴趣爱好)花钱应该在今后成为自我疗愈历程的重要一部分。
既然选择生活,先做一个爱自己的人吧。

6月6日 Update:
到货了但是发现竟然还是古董MicroUSB接口,给我整的有点无语。想着都2025了大意了没细问接口这件事。遂退货退款+钱换高漫M8了。 顺便去论坛发帖资讯了一下网友的意见,意外的统一建议IPAD,但是真心不想用IPAD,或者说不想用苹果的封闭生态专有产品。故最终还是+了100多块钱继续买M8了,咸鱼二手便宜一百,相当于我一天工资,不过懒得操心质量问题,况且是补偿自己的该花的我不打算那么抠抠索索。

6月8日 Update
M8到了,感觉....作为泡面盖子很合适.heic

11 条评论 已丢失

https://web.archive.org/web/20250416075550/https://xfox.fun/archives/2088/ 恢复
作者: 未知狐 时间: 2025-3-22 分类: 随手记,Linux,时间轴,折腾=-=
购买新的服务器后,我也不打算继续续费sakurafrp了,所以反代提供公网IPv4访问的工作需要转移到Claw HK机上,同样地Mumble服务器的IPv4转发也需要迁移到Claw HK机器上。
除了博客本身直接部署,所有需要反代,转发的服务都通过WireGuard组网后虚拟局域网转发完成。

Nginx反代配置

nas.xfox.fun

# HTTPS 强制跳转配置
server {
    listen 80;
    listen [::]:80;
    server_name nas.xfox.fun;
    return 301 https://$host$request_uri;
}

# 主 HTTPS 服务配置
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name nas.xfox.fun;

    # 更新后的SSL证书路径
    ssl_certificate /home/xfox/www/all_xfox.fun/fullchain.pem;
    ssl_certificate_key /home/xfox/www/all_xfox.fun/privkey.pem;

    # SSL 优化配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;
    add_header Strict-Transport-Security "max-age=63072000" always;

    # 反向代理配置
    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        
        proxy_redirect off;
        proxy_pass http://10.10.0.2:5212;

        # 超大文件支持 client_max_body_size 缺省单位->字节 ,k千字节,m兆字节,g千兆字节
        client_max_body_size 16g;
        proxy_request_buffering off;
        proxy_buffering off;
    }
}

Mumble IPv4转发 && 数据库与配置文件同步

我尝试使用iptables转发失败了,然后换了nftables还是失败了,懒得折腾了。
直接把Mumble服务器也迁移到Claw HK上。
后续直接写脚本同步数据库和配置文件。

Mumble数据库和配置文件
两个属于root的文件:

-rwxrwxrwx 1 root root 16K 12月16日 20:26 /etc/mumble-server.ini
-rwxrwxrwx 1 root root 1016K  3月22日 16:06 /var/lib/mumble-server/mumble-server.sqlite

接下来先把家庭服务器的Mumble服务器配置同步到ClawHK服务器

# 同步配置文件
sudo rsync -avz -e "ssh -i /home/xfox/.ssh/id_ed25519 -o StrictHostKeyChecking=no" \
  /etc/mumble-server.ini \
  [email protected]:/etc/

# 同步数据库文件
sudo rsync -avz -e "ssh -i /home/xfox/.ssh/id_ed25519 -o StrictHostKeyChecking=no" \
  /var/lib/mumble-server/mumble-server.sqlite \
  [email protected]:/var/lib/mumble-server/

启动Mumble服务器发现:
Mar 22 09:58:29 ClawHK mumble-server[50320]: 2025-03-22 09:58:29.869 Initializing settings from /etc/mumble-server.ini (basepath /etc)
Mar 22 09:58:29 ClawHK mumble-server[50320]: 2025-03-22 09:58:29.870 MetaParams: Failed to read /home/xfox/www/all_xfox.fun/fullchain.pem
看上去Mumble-server没权限读取证书。

sudo chmod +x /home/xfox /home/xfox/www /home/xfox/www/all_xfox.fun

即可。

仅有一条评论
EricQwQEricQwQ
2025年3月28日0:17
sakurafrp還是不錯的…免費版真香,主要是穩定+方便

回复