月度归档: 2024 年 11 月

  • 【音乐】《Data & Picard》——听不懂,但,好听!

    这首歌曲是 YouTube博主——Pogo 的作品,一首有关《星际迷航》的混音作品,注意是混音作品,所以这流畅的听感,洗脑的旋律,真是太强了。

    作者在作品发布页写道:

    Temba, his arms wide! In Tamarian this signifies the giving of a gift, first heard in the excellent episode Darmok. Data & Picard is my tribute to one of the greatest TV series of all time. It is an original track featuring the voices of Captain Picard (Patrick Stewart) and Commander Data (Brent Spiner), accompanied by a music video I shot entirely in my living room with a green screen and lights.

    The track opens with the Klingon Victory Song, followed by a remix of Data singing Che Gelida Manina in the episode ‘In Theory’. This episode was the first ever to be directed by Patrick Stewart and I didn’t realize this until after the track was finished.

    我是没看过星际迷航的,所以只能写一些关于本曲的感受:

    第一次听:这是什么东西

    第二次听:好像有点意思

    第三次听:se la laaaa-sci riscaldar!

    一种不知道哪里冒出来的,又老又新的奇特感受,同时异常洗脑。

    关于本曲MV:

    作者写道:

    I sourced the Ben Nye makeup that was used to turn Spiner into Data, and a replica of the iconic Star Fleet uniform. Unfortunately I couldn’t get the contact lenses in and I could only get the uniform in red, so I spent a huge amount of time changing the colour of my eyes and uniform in post.

    The video was shot in Slog 4k ProRes HQ using a Sony A7SII and an Atomos Ninja Flame. Lights included 3x Arri 800w Tungstens, 2x Socanland LED banks to light the screen, and one 2000w Blonde to simulate sunlight. BIG thanks to the guys at HD Rentals in Perth for helping me out.

  • 【音乐】《La La La》——蹬车神曲

    想必听过该曲子的朋友们都拥有一辆山地自行车吧()

    B站UP主:“尽墨for车”多次使用该曲在山地自行车比赛中,如此的节奏伴随惊险刺激的山地车比赛画面,谁听完不想下去蹬一圈呢?那么,加油吧!蹬洋车子的大哥哥(

    关于本曲:

    Midnight Generation 是一支来自墨西哥北部的流行乐队,互联网上的信息也不是很多。

    在这张《Funk Your Bones (Side B)》专辑里的《Young Girl》也很好听,十分推荐。

    Live版:

  • 【网站】为WordPress添加APlayer播放器

    引入方式类似prism,由于使用概率较大,因此在主题模板函数中进行全局引入:

    // Function to add APlayer.mini.css and APlayer.mini.js to the site
    function add_APlayer() {
        
        wp_register_style(
            'APlayerCSS', // handle name for the style 
            get_stylesheet_directory_uri() . '/APlayer.css' // location of the file
        );
    
        wp_register_script(
            'APlayerJS', // handle name for the script 
            get_stylesheet_directory_uri() . '/APlayer.js' // location of the file
        );
    
        // Enqueue the registered style and script files
        wp_enqueue_style('APlayerCSS');
        wp_enqueue_script('APlayerJS');
    }
    add_action('wp_enqueue_scripts', 'add_APlayer');

    然后采用 APlayer官方文档 中描述的方式引入:

    <div id="aplayer">
    </div>
    <script>
    const ap = new APlayer({
        container: document.getElementById('aplayer'),
        audio: [{
            name: '',
            artist: '',
            url: '',
            cover: ''
        }]
    });
    </script>

  • 【Python】对本地网页进行元素提取并输出Excel

    一些网页通过加载Js来保护页面元素,当我们突破Js得到本地页面时,可以使用BS4库对页面进行分析,提取对应的元素来综合有价值的内容。

    示例代码:

    import requests
    from bs4 import BeautifulSoup
    import pandas as pd
    
    # 发送请求并获取网页内容
    url = 'your_local_or_online_page_url'
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 定义一个空的列表来存储提取的数据
    data = []
    
    # 遍历页面中的项目列表,假设项目数据都在某个父元素中
    projects = soup.find_all('tr', class_='project-id')  # 根据实际情况修改选择器
    
    # 提取每个项目的各项数据
    for project in projects:
        # 获取项目ID
        project_id = project.find('td', class_='project-id-class').get_text(strip=True)  # 修改为实际选择器
        
        # 将提取的数据添加到列表中
        data.append([project_id]) # 按实际修改
    
    # 创建 DataFrame 并保存为 Excel
    df = pd.DataFrame(data, columns=['ID']) # 按实际修改
    df.to_excel('projects_data.xlsx', index=False)
    
    print("Data has been successfully extracted and saved to 'projects_data.xlsx'.")

    主要用到了BS4库。

    示意代码:

    from bs4 import BeautifulSoup
    
    # 假设有一个HTML文档
    html_doc = """
    <html>
      <head><title>Example Page</title></head>
      <body>
        <p class="title"><b>Sample Page</b></p>
        <p class="story">This is a test story. <a href="http://example.com/1" class="link">link1</a> <a href="http://example.com/2" class="link">link2</a></p>
        <p class="story">Another test story.</p>
      </body>
    </html>
    """
    
    # 使用 BeautifulSoup 解析 HTML 文档
    soup = BeautifulSoup(html_doc, 'html.parser')
    
    # 提取<title>标签的内容
    title = soup.title.string
    print(f"Title: {title}")
    
    # 提取所有的链接(<a> 标签)
    links = soup.find_all('a')
    for link in links:
        print(f"Link text: {link.string}, URL: {link['href']}")
    
    # 查找特定类的<p>标签
    story_paragraphs = soup.find_all('p', class_='story')
    for p in story_paragraphs:
        print(f"Story paragraph: {p.get_text()}")

  • 【HTML】iframe小工具——提取嵌入链接并重设参数

    一般类似YouTube、Bilibili的分享链接,都设置了各自网站的相应参数,为了快速提取其src内容并自定义部分参数,可以使用该小工具进行快速设置。

    操作区
    预览展示区
    查看代码

    <style>
            textarea, input, select {
                width: 100%;
                margin-bottom: 10px;
                padding: 5px;
                font-size: 14px;
            }
            button {
                font-size: 16px;
                margin-bottom: 10px;
                padding: 5px 10px;
            }
            .link-container {
                margin-top: 10px;
            }
            .link-item {
                margin-bottom: 5px;
            }
            .iframe-preview {
                margin-top: 20px;
                padding: 10px;
                border: 1px solid #ddd;
                background: #f9f9f9;
            }
            .iframe-preview pre {
                font-size: 14px;
                background: #e9e9e9;
                padding: 10px;
                border-radius: 5px;
            }
            .row {
                display: flex;
                flex-wrap: wrap;
                gap: 10px;
            }
            .col {
                flex: 1 1 20%;
            }
            .col input, .col select {
                width: 100%;
            }
            .unit-select {
                width: 10px; /*缩小单位选择框宽度*/
            }
            .empty-option {
                font-size: 14px;
            }
            #iframePreviewContainer {
                margin-top: 20px;
            }
        </style>
    </head>
    <body>
        <!-- 输入框 -->
        <textarea id="iframeInput" placeholder="在此输入多个 iframe 代码"></textarea>
        <button id="extractButton">提取链接</button>
    
        <!-- 链接展示区 -->
        <div id="result" class="link-container"></div>
    
        <!-- 单个链接操作区 -->
        <h2>操作区</h2>
        <input id="selectedLink" type="text" placeholder="点击复制按钮后,链接将填入此处" readonly>
        
        <!-- iframe 属性设置 -->
        <div class="row">
            <div class="col">
                <label for="iframeTitle">标题:</label>
                <input id="iframeTitle" type="text" placeholder="请输入 iframe 标题">
            </div>
            <div class="col">
                <label for="iframeWidth">宽度:</label>
                <input id="iframeWidth" type="text" placeholder="例如 560">
            </div>
            <div class="col">
                <label for="iframeWidthUnit">宽度单位:</label>
                <select id="iframeWidthUnit" class="unit-select">
                    <option value="px">px</option>
                    <option value="%">%</option>
                    <option value="vw">vw</option>
                </select>
            </div>
            <div class="col">
                <label for="iframeHeight">高度:</label>
                <input id="iframeHeight" type="text" placeholder="例如 315">
            </div>
            <div class="col">
                <label for="iframeHeightUnit">高度单位:</label>
                <select id="iframeHeightUnit" class="unit-select">
                    <option value="px">px</option>
                    <option value="%">%</option>
                    <option value="vh">vh</option>
                </select>
            </div>
        </div>
    
        <div class="row">
            <div class="col">
                <label for="iframeFullscreen">允许全屏:</label>
                <select id="iframeFullscreen">
                    <option value="allowfullscreen">是</option>
                    <option value="">否</option>
                </select>
            </div>
            <div class="col">
                <label for="iframeReferrer">Referrer Policy:</label>
                <select id="iframeReferrer">
                    <option value="no-referrer">不发送</option>
                    <option value="no-referrer-when-downgrade">仅同源</option>
                    <option value="origin">仅发送源</option>
                    <option value="origin-when-cross-origin">跨源时发送源</option>
                    <option value="same-origin">同源发送完整路径</option>
                    <option value="strict-origin">严格同源发送源</option>
                    <option value="strict-origin-when-cross-origin">默认(严格同源)</option>
                    <option value="unsafe-url">发送完整 URL</option>
                    <option value="">保持空值</option>
                </select>
            </div>
            <div class="col">
                <label for="iframeLoading">加载方式:</label>
                <select id="iframeLoading">
                    <option value="eager">立即加载</option>
                    <option value="lazy">懒加载</option>
                    <option value="">保持空值</option>
                </select>
            </div>
            <div class="col">
                <label for="iframeAutoplay">自动播放:</label>
                <select id="iframeAutoplay">
                    <option value="autoplay">是</option>
                    <option value="">否</option>
                </select>
            </div>
        </div>
    
        <div class="row">
            <div class="col">
                <label for="iframeEncrypted">加密媒体:</label>
                <select id="iframeEncrypted">
                    <option value="encrypted-media">是</option>
                    <option value="">否</option>
                </select>
            </div>
            <div class="col">
                <label for="iframePictureInPicture">画中画:</label>
                <select id="iframePictureInPicture">
                    <option value="picture-in-picture">是</option>
                    <option value="">否</option>
                </select>
            </div>
            <div class="col">
                <label for="iframeWebShare">Web分享:</label>
                <select id="iframeWebShare">
                    <option value="web-share">是</option>
                    <option value="">否</option>
                </select>
            </div>
        </div>
    
        <!-- 生成 iframe 和复制按钮 -->
        <div>
            <button id="generateIframeButton">生成 iframe 嵌入代码</button>
            <button id="copyIframeButton">复制生成代码</button>
        </div>
    
        <!-- iframe 代码展示 -->
        <div id="generatedIframe" class="iframe-preview">
            <textarea id="iframeCodeText" readonly rows="10"></textarea>
        </div>
    
        <!-- iframe 预览展示区 -->
        <div id="iframePreviewContainer" class="iframe-preview">
            <h2>预览展示区</h2>
            <iframe id="iframePreview" src="" width="560" height="315" style="border: none;"></iframe>
        </div>
    
        <script>
            // 缓存常用的 DOM 元素
            const iframeWidthInput = document.getElementById('iframeWidth');
            const iframeHeightInput = document.getElementById('iframeHeight');
            const iframeWidthUnit = document.getElementById('iframeWidthUnit');
            const iframeHeightUnit = document.getElementById('iframeHeightUnit');
            const selectedLinkInput = document.getElementById('selectedLink');
            const iframeFullscreenSelect = document.getElementById('iframeFullscreen');
            const iframeReferrerSelect = document.getElementById('iframeReferrer');
            const iframeLoadingSelect = document.getElementById('iframeLoading');
            const iframeAutoplaySelect = document.getElementById('iframeAutoplay');
            const iframeEncryptedSelect = document.getElementById('iframeEncrypted');
            const iframePictureInPictureSelect = document.getElementById('iframePictureInPicture');
            const iframeWebShareSelect = document.getElementById('iframeWebShare');
            const iframeTitleInput = document.getElementById('iframeTitle');
            const generateIframeButton = document.getElementById('generateIframeButton');
            const copyIframeButton = document.getElementById('copyIframeButton');
            const iframeCodeText = document.getElementById('iframeCodeText');
            const iframePreview = document.getElementById('iframePreview');
            const resultDiv = document.getElementById('result');
    
            // 提取 iframe src 链接
            function extractSrc() {
                const input = document.getElementById('iframeInput').value;
                resultDiv.innerHTML = ''; // 清空之前的结果
    
                const srcMatches = [...input.matchAll(/src="([^"]+)"/g)];
                if (srcMatches.length > 0) {
                    const srcLinks = srcMatches.map(match => match[1]);
    
                    srcLinks.forEach(link => {
                        const linkItem = createLinkItem(link);
                        resultDiv.appendChild(linkItem);
                    });
                } else {
                    resultDiv.textContent = '没有找到有效的 iframe 链接';
                }
            }
    
            // 创建链接项
            function createLinkItem(link) {
                const div = document.createElement('div');
                div.classList.add('link-item');
    
                const textNode = document.createTextNode(link);
                const copyButton = document.createElement('button');
                copyButton.textContent = '复制';
                copyButton.onclick = function() {
                    selectedLinkInput.value = link;
                };
    
                div.appendChild(textNode);
                div.appendChild(copyButton);
                return div;
            }
    
            // 生成 iframe 代码
            function generateIframeCode() {
                const width = iframeWidthInput.value;
                const height = iframeHeightInput.value;
                const widthUnit = iframeWidthUnit.value;
                const heightUnit = iframeHeightUnit.value;
                const title = iframeTitleInput.value;
                const src = selectedLinkInput.value;
                const fullscreen = iframeFullscreenSelect.value;
                const referrer = iframeReferrerSelect.value;
                const loading = iframeLoadingSelect.value;
                const autoplay = iframeAutoplaySelect.value;
                const encrypted = iframeEncryptedSelect.value;
                const pictureInPicture = iframePictureInPictureSelect.value;
                const webShare = iframeWebShareSelect.value;
    
                let iframeCode = `<iframe src="${src}"`;
    
                if (title) {
                    iframeCode += ` title="${title}"`;
                }
                iframeCode += ` width="${width}${widthUnit}" height="${height}${heightUnit}"`;
    
                if (fullscreen) {
                    iframeCode += ` ${fullscreen}`;
                }
    
                if (referrer) {
                    iframeCode += ` referrerpolicy="${referrer}"`;
                }
    
                if (loading) {
                    iframeCode += ` loading="${loading}"`;
                }
    
                if (autoplay) {
                    iframeCode += ` ${autoplay}`;
                }
    
                if (encrypted) {
                    iframeCode += ` ${encrypted}`;
                }
    
                if (pictureInPicture) {
                    iframeCode += ` ${pictureInPicture}`;
                }
    
                if (webShare) {
                    iframeCode += ` ${webShare}`;
                }
    
                iframeCode += '></iframe>';
    
                iframeCodeText.value = iframeCode;
                iframePreview.src = src;
            }
    
            // 复制代码到剪贴板
            function copyIframeCode() {
                iframeCodeText.select();
                document.execCommand('copy');
            }
    
            // 事件监听
            document.getElementById('extractButton').addEventListener('click', extractSrc);
            generateIframeButton.addEventListener('click', generateIframeCode);
            copyIframeButton.addEventListener('click', copyIframeCode);
        </script>
    </body>
  • 【摄影特辑】青岛2023

    【摄影特辑】青岛2023

    镜头:Panasonic 30mm Macro

    相机:Panasonic G9M2

    后期:Snapseed

    很荣幸,第二张图片还被松下影像翻了牌子

  • 【音乐】《踊り子》(舞女)——Vaundy与小松菜奈的奇妙配合

    歌词

    ねぇ、どっかに置いてきたような

    事が一つ二つ浮いているけど

    ねぇ、ちゃんと拾っておこう

    はじけて忘れてしまう前に

    ねぇ 回り出した あの子と僕の未来が

    止まりどっかで またやり直せたら

    回り出した あの子と僕が被害者

    づらでどっかを また練り歩けたらな

    とぅるるる とぅるるる とぅるる

    とぅるるる とぅるるる とぅるる

    とぅるるる とぅるるる とぅるる

    とぅるるる とぅるるる とぅるる

    あのね、私あなたに会ったの

    夢の中に置いてきたけどね

    ねぇ、どうして私が好きなの

    一度しか会ったことがないのにね

    ああ 思いを蹴って

    二人でしてんだ

    壊(わす)れない愛を歌う

    言葉を二人に課して

    誓いをたてんだ

    忘れない愛を歌うようにね

    回り出した あの子と僕の未来が

    止まりどっかで またやり直せたら

    回り出した あの子と僕が被害者

    づらでどっかを また練り歩けたらな

    とぅるるる とぅるるる とぅるる

    とぅるるる とぅるるる とぅるる

    とぅるるる とぅるるる とぅるる

    とぅるるる とうるるる とぅるる

    とぅるるる とうるるる とぅるる

    とぅるるる とうるるる とぅるる

    とぅるるる とぅるるる とぅるる

    とぅるるる とぅるるる とぅるる

    回り出した あの子と僕の未来が

    止まりどっかで またやり直せたら

    回り出した あの子と僕が被害者

    づら でどっかを また練り歩けたらな

    時代に乗って僕たちは

    変わらず愛に生きるだろう

    僕らが散って残るのは

    変わらぬ愛の歌なんだろうな

    時代に乗って僕たちは

    変わらず愛に生きるだろう

    僕らが散って残るのは

    変わらぬ愛の歌なんだろうな

    とぅるるる とぅるるる とぅるる

    とぅるるる とぅるるる とぅるる

    とぅるるる とぅるるる とぅるる

    とぅるるる とぅるるる とぅるる

    《踊り子》(舞女)是音乐鬼才Vaundy作词、作曲、演唱的一首歌曲,没错,虽然MV里面是小松菜奈,但是整个曲子都是由Vaundy所演唱,慵懒的嗓音配上小松竟也没有很违和。

    VIA Wiki:谈到 MV 拍摄,小松说:“一整天,’Dancer’一直在我的脑海中一遍又一遍地旋转,我能够旋转、旋转、旋转、奔跑,我能够一直跳舞,一首让我想跳舞的歌,我自由地摇晃着身体,转眼间就过去了,我能够度过一段快乐的时光!我回头看。 Vaundy 也出席了拍摄现场,小松评论道:“这是一次友好而愉快的拍摄,因为 Vaundy 在现场一起享受它。

    该曲2021年11月17日发布,Billboard JAPAN最高排名15位。

    MV也是4:3画幅,但是官方上传的视频是16:9,两侧有黑边,截图时候批量去除了。

  • 【Python】裁切图片为指定画幅比例

    该工具是在截取MTV的画面时产生的需求,一些4:3画幅的视频制作时候加入了黑边,成了16:9视频,因此想截图出原本4:3的画面,一方面可以进剪辑软件进行直接裁剪,也可以在原视频进行导出后操作,考虑到二压费时费力,因此选择对截取的图片进行批处理。

    import os
    import random
    import string
    from tkinter import Tk, filedialog, Button, Label, messagebox
    from PIL import Image
    
    
    def random_filename(extension):
        """生成随机文件名"""
        chars = string.ascii_letters + string.digits
        return ''.join(random.choices(chars, k=8)) + f".{extension}"
    
    
    def crop_to_aspect(image, target_ratio=4/3):
        """裁剪图像宽边以符合指定宽高比"""
        width, height = image.size
        current_ratio = width / height
    
        if current_ratio > target_ratio:  # 如果宽高比大于目标比例,宽度过大
            new_width = int(height * target_ratio)  # 计算符合比例的新宽度
            left = (width - new_width) // 2  # 左侧裁剪量
            right = left + new_width  # 右侧裁剪量
            image = image.crop((left, 0, right, height))  # 裁剪左右宽边
    
        return image
    
    
    def process_images():
        """处理图片并保存结果"""
        input_files = filedialog.askopenfilenames(
            title="选择图片文件",
            filetypes=[("Image Files", "*.jpg *.png")]
        )
        if not input_files:
            return
    
        output_dir = filedialog.askdirectory(title="选择输出文件夹")
        if not output_dir:
            return
    
        for file_path in input_files:
            try:
                with Image.open(file_path) as img:
                    # 转换为符合比例的图片
                    processed_img = crop_to_aspect(img)
                    # 保存文件
                    ext = file_path.split('.')[-1]
                    output_path = os.path.join(output_dir, random_filename(ext))
                    processed_img.save(output_path)
            except Exception as e:
                messagebox.showerror("错误", f"处理文件 {file_path} 时出错: {e}")
                continue
    
        messagebox.showinfo("完成", "图片批量处理完成!")
    
    
    def create_gui():
        """创建GUI"""
        root = Tk()
        root.title("图片批量处理工具")
        root.geometry("400x200")
    
        Label(root, text="批量处理图片 - 保持高度裁切宽边为4:3比例").pack(pady=20)
        Button(root, text="选择图片并处理", command=process_images).pack(pady=10)
        Button(root, text="退出", command=root.quit).pack(pady=10)
    
        root.mainloop()
    
    
    if __name__ == "__main__":
        create_gui()

  • 【音乐】《深海》——魔力娜娜森七菜

    一首来自Mori Nana的让人印象深刻的作品。

    作词作曲是YOASOBI的Ayase,所以曲调听起来,你懂的。

    我觉得最值得一提的是其MV,构图、调色可圈可点,视频还采用了4:3的画幅,呈现出非常别样的视觉体验,与一些伪4:3画幅MV不同,本曲在Youtube(视频油管链接)上真的是4:3的原生视频比例。

    可惜索尼音乐在B站上传的视频则是加了黑边的16:9视频,让人不快。

    点击展开歌词

    专辑:深海

    歌手:森七菜

    作词: Ayase

    作曲: Ayase

    编曲: Ayase

    歌词翻译来自网易云音乐

    慌ただしく——时光匆忙

    過ぎてゆく日々——流逝而过

    帰る場所は——我并没有

    間違ってなんかないのに——搞错该回的地方

    君の声が聞きたくて——想要听见你的声音

    そっと瞳閉じる——于是轻轻闭上双眼

    深い海の底たゆたう体——幽深的海底 飘荡的身体

    彷徨うだけの私は魚——只懂得彷徨的我仿佛化身游鱼

    水面から差し込む光の彼方——水面上透来的光芒彼方

    届けと願うように——希望能够到达

    手を伸ばす——努力地伸出手

    君には見えてますか——你是否能够看得见呢

    あの星が夢が——那颗星星、梦想

    私のこの想いが——还有我的思念

    どこかで泣いていませんか——你是否正躲在哪里偷偷地哭泣

    ただ願う声は——唯有祈祷的声音

    泡になって——化作泡影

    忙しなく街に灯る——城市匆匆忙忙

    煌びやかな明かり——华灯悠悠初上

    休むことなく日々は——我也知道时光会

    続いてくんだと知る——毫不停歇地流淌

    吐き出すため息から——倾吐的叹息之中

    零れた「会いたいな」——漏出一句「好想见你」

    他人の声にかき消されていく——却被别人的声音掩盖抹消

    今日はこんなことが——今天发生了这样的事

    昨日はこんなことが——昨天发生了这样的事

    私は変わらず元気でいるよ——我依旧如往常一般安好

    今日はどんなことが?——今天会发生什么样的事呢?

    昨日はどんなことが?——昨天发生了什么样的事呢?

    ねえ君は元気にしていますか?——呐,你过得还好吗?

    深い夜の底に沈む体——身躯沉入深夜的渊底

    ざわつく胸、瞳閉じたまま——心中躁动 眼眸紧闭

    気付けば差し込む朝日のかけらが——回过神来 朝阳的碎片穿透而来

    優しく頬を撫でる——温柔地抚摸着我的脸颊

    窓から見えた木々が——每当从窗户看到的树木

    揺れる度——随风摇曳

    君の住むあの町の思い出が——你栖身之于那座城市的回忆

    溢れて溺れそうになるけど——便要涌起 快将我淹没

    同じ空の下でほら——但我们就在同一片天空下

    生きている——共同生活着

    君にはいつまでもただ——你绝不会

    理不尽な悲しみに——永远沉浸在

    飲み込まれることなく——不讲道理的悲伤中

    優しく穏やかな暮らしの中——温柔安宁的生活中

    笑っていて欲しいから——我希望你可以微笑

    君は覚えてますか——不知道你是否还记得

    あの日々を——那些日子

    共に過ごした風景を——我们一起经过的风景

    私が帰る場所は今でも

    君と同じ——时至今日 我的归处

    いつの日かもう——一度仍然与你相同

    笑い合えるその日を——我会想念着

    想いながら——能与你再度共同欢笑的那一天

    眠りにつく——安心地进入梦乡

    大家对森七菜最熟悉的作品其实应该是《天气之子》,其在电影中担任女主——天野阳菜的CV。

    Mori Nana是她的英文名,人如其名,魔力娜娜的照片充满了活力与魔力,看着就让人心情愉悦,推荐关注!

    森七菜的ins——mori.chan.7

    森七菜Staff的官方ins——nana_mori_official

    最后,一起欣赏一些MV中的画面吧~个人觉得调色和构图可以作为写真的拍摄参考。

    最后,在MV的结尾,我看到了视频的导演——林響太朗 Kyotaro Hayash,搜索到了他的个人网站,内容与网页设计都非常不错,推荐给大家。

  • 【HTML】输入Pixiv ID跳转对应画师主页

    Pixiv的应用内部居然没这个功能,不科学,非常基础的功能。

    收录进了小工具页面。👉点击使用小工具

    <body>
        <h1>Pixiv用户跳转</h1>
        <input id="input-id" type="text" placeholder="请输入数字ID" oninput="validateInput()" />
        <div>
            <button onclick="generateLink()">生成链接</button>
            <button onclick="openLink()">跳转</button>
        </div>
        <div id="output"></div>
    
        <script>
            function validateInput() {
                const input = document.getElementById('input-id');
                input.value = input.value.replace(/\D/g, ''); // 只保留数字
            }
    
            function generateLink() {
                const input = document.getElementById('input-id').value.trim();
                const output = document.getElementById('output');
                if (input === '') {
                    output.innerHTML = '<p style="color: red;">请输入有效的数字ID!</p>';
                    return;
                }
                const link = `https://www.pixiv.net/member.php?id=${input}`;
                output.innerHTML = `<a href="${link}" target="_blank">点击跳转到 Pixiv 用户页面</a>`;
            }
    
            function openLink() {
                const input = document.getElementById('input-id').value.trim();
                if (input === '') {
                    alert('您还没有输入ID~');
                    return;
                }
                const link = `https://www.pixiv.net/member.php?id=${input}`;
                window.open(link, '_blank');
            }
        </script>
    </body>