Typecho演示站

Typecho主题演示站,内容采集自互联网,本站仅做测试使用!

魔兽世界回来了

· 发表评论

魔兽世界回来了

4月10日,暴雪娱乐、微软游戏与网易共同宣布,暴雪娱乐旗下游戏作品,将根据更新后的游戏发行协议自今年夏季开始陆续重返中国市场。

随后,魔兽世界官方微博公布《致暴雪国服游戏玩家的信》,魔兽世界在信中表示,他们仍需不短的时间进行开服的技术准备,但第一款回归的游戏将在夏天与大家重逢。同时提醒玩家:“当服务器开启时,我们将保证您的账号数据被完整保留。请勿听信谣言参与不受保护的账户或账号数据交易。”

魔兽世界还表示,“更多的反外挂措施将被加入游戏之中。在新的协议中,我们将有更大的空间开展针对国服的游戏环境优化工作,更多更新的技术手段以及法务手段都已严阵以待。”

随后,暴雪中国通过暴雪游戏服务中心发布《努力治愈,再超量恢复——致国服暴雪游戏玩家的信》公布了国服规则——当服务器开启时,将保证账号数据被完整保留。

据介绍,目前网易与暴雪方面合作协议已经签订,但仍需要不短的时间来进行开服的技术准备,比如我们需要重建新的服务器机房、恢复各类数据等。不能很快为您送上暴雪全家桶。

当服务器开启时,暴雪将保证用户的账号数据被完整保留。同时,暴雪表示,在国服缺席的时间里,玩家错过了许多活动与福利。所以官方将尽可能为您提供重新获得活动与福利的机会。官方也将为国服玩家准备回归纪念福利与运营活动。

此外,官方还会通过各种途径观察、收集玩家们对游戏开服版本的需求,并妥善安排版本策略。暴雪游戏的各项电竞赛事也已开始筹备。

目前,网易暴雪已经开放了部分游戏的预约。其中,网易旗下游戏社区网易大神已开放《魔兽世界》预约。截至4月10日中午,已有近20万人在网易大神预约《魔兽世界》。

网易暴雪游戏发行团队也第一时间开启招聘。目前热招的职位包括《魔兽世界》《炉石传说》《守望先锋》三款游戏的高级/资深运营策划。

该岗位要求能够制定适合中国市场的产品计划和运营方针,维护游戏环境。要求能为中国玩家安排有诚意的游戏回归福利方案等。此外,该团队目前还招聘游戏运维开发工程师、游戏项目管理、资深品牌营销、抖音运营经理、用户研究专家、资深数据分析专家等大量岗位员工。

以下为公告全文:

努力治愈,再超量恢复 --致暴雪国服游戏玩家的信

亲爱的暴雪玩家们,好久不见,我们即将重聚!

刚刚,国服官宣确认回归!为此,我们欣喜若狂,又倍感责任,所以希望这封信可以解答您的部分疑惑,并且分享一些我们的愿景。

协议已经签订,但我们仍需要不短的时间来进行开服的技术准备,比如我们需要重建新的服务器机房、恢复各类数据等。不能很快为您送上暴雪全家桶,我们非常抱歉。无论是网易或是雪,都将全力以赴缩短您的等待。各游戏将依次开启,第一款回归的游戏将在夏天与大家重逢。

当服务器开启时,我们将保证您的账号数据被完整保留。请勿听信谣言参与不受保护的账号或账号数据交易。

在国服缺席的时间里,您错过了许多活动与福利。我们将尽可能为您提供重新获得它们的机会。我们也将为国服玩家准备回归纪念福利与运营活动。

我们会通过各种途径观察、收集玩家们对游戏开服版本的需求,并妥善安排版本策略。各项

电竞赛事也已开始筹备,缺少国服玩家,我们少了太多精彩!许多工作需要潜心推进,我们将在未来合适时间向大家介绍各个游戏的具体安排,希望能让您满意。

以上,是我们对治愈停服遗憾做出的努力。

伤筋动骨恢复不容易,但大家恢复后的筋骨会更加强韧,正所谓超量恢复。通过新的合作方式,我们将为国服玩家超量恢复更好的服务。

更多的反外挂措施将被加入游戏之中。在新的协议中,我们将有更大的空间开展针对国服的游戏环境优化工作,更多更新的技术手段以及法务手段都已严阵以待。

国服发行团队将与游戏开发者们开展更加深入的交流合作,我们将一起为大家带来更优质的服务与内容。

创作者社区也将得到更优质的管理与扶持。在国服离开的时间里,许多作者仍然为暴雪游戏提供着优质的内容,这份热爱与付出,将有相对应的收获。新兴的创作者们也将获得更多机会收获关注。感谢创作者们多年来的付出与信任!

最后,让我们一起来重铸血吼吧!

网易与暴雪的艺术家们将通力合作,设计并铸造全新的血吼雕塑。我们将收集玩家们的心意与回忆,并把他融入设计,刻入新生的血吼。我们将让新生的血吼成为玩家、网易与暴雪的全新信物。本次掉落,永不磨损。

您可以在官方网站参与留言活动。不仅被选中的留言将被铸进血吼,该留言玩家也将获得价值500元的暴雪周边礼包。您也可以通过合作渠道网易大神APP与网易云音乐APP参与活动,各有更多好礼相迎。

我们相信,一同经历的痊愈会带来更牢固的信任。太平洋两岸的新生团队将用最大的热情回应您的召唤。

感谢您的等待,我们回来了。

国服团聚开组+++++++++++++++++++进组打1

稿源:财经网

谷歌官宣“魔法橡皮擦”AI修图下放至所有用户:每月限免 10 次

· 发表评论

根据谷歌北京时间今日发布的新闻稿,Magic Editor(魔法编辑器)、Photo Unblur(消除模糊)、Magic Eraser(魔法橡皮擦)和更多增强编辑功能将向所有谷歌相册用户开放,无需订阅。

据介绍,从今年 5 月 15 日开始,这一系列基于 AI 的图片编辑功能将免费提供给任何用户。不过使用这些功能仍有一个限制条件:每月只能免费使用 10 次,如果想要更多次数则只有两个选择:更换一台 Pixel 手机或订阅 Google One 付费版会员。

“魔法编辑器”起初于去年登陆 Pixel 8 / Pro 系列手机,可通过生成式 AI 来完成一系列照片编辑操作,例如调整拍摄对象的位置、或更换天空色调等等。

谷歌官宣“魔法橡皮擦”等 AI 修图功能下月下放至所有用户:每月限免 10 次

谷歌官宣“魔法橡皮擦”等 AI 修图功能下月下放至所有用户:每月限免 10 次

谷歌官宣“魔法橡皮擦”等 AI 修图功能下月下放至所有用户:每月限免 10 次

谷歌官宣“魔法橡皮擦”等 AI 修图功能下月下放至所有用户:每月限免 10 次

谷歌此前宣布,今年 5 月 14 日将举办 2024 年度 I / O 开发者大会。本次大会主要通过在线直播方式进行,不过会邀请少量开发者、嘉宾、自媒体到现场观看。至于本次开发者大会的主题,其中一个必然是人工智能(AI),谷歌在官方博文中提及“Gemini 时代”,预估会发布大量关于 Gemini 模型的最新动态。

谷歌可能会在本次发布会上公布关于安卓 15 系统的相关信息。

硬件方面,谷歌可能会在本次开发者活动中宣布 Pixel 8a 手机,更新 Chromecast 和 Google TV 产品等等。

微软推广Win11再出新招:Win10用户反馈PC出现全屏提醒“明年停用”

· 发表评论

Reddit 网友 Woopinah9 今日发帖称,自己装有 Windows 10 的电脑在更新了星期二补丁之后,在自己工作时突然弹出了一个全屏提醒:请踏上 Windows 的新旅程。

微软推广 Win11 再出新招:Win10 用户反馈 PC 出现全屏提醒“明年停用”

这个全屏提醒中,微软先是“感谢”用户对 Windows 10 的忠诚,随后话锋一转,提醒用户 Windows 10 将于 2025 年 10 月 14 日不再获得支持。然而令人哭笑不得的是,该页面赫然显示“您的电脑没有资格升级到 Windows 11,但它将继续接收 Windows 10 修补程序和安全更新”。(Your PC is not eligible to upgrade to Windows 11, but it will continue toreceive Windows 10 fixes and security updates until support ends on October 14, 2025.)

这个弹窗提供了数个按钮,但没有一个按钮提示用户如何关闭该提醒。

微软推广 Win11 再出新招:Win10 用户反馈 PC 出现全屏提醒“明年停用”

早在 2019 年,微软就已经通过类似的手段通知 Windows 7 用户:支持即将结束,请升级。

你的 Windows 7 电脑不受支持。

截至 2020 年 1 月 14 日,对 Windows 的支持将结束。由于以下原因,你的电脑更容易受到病毒和恶意软件的攻击:

  • 没有安全更新
  • 没有软件更新
  • 没有技术支持

Microsoft 强烈建议在新电脑上使用 Windows 10,以获取最新安全功能并防御恶意软件。

在微软 3 月发布的 Win10 RP 19045.4233 预览版中,用户登录系统中之后,会看到一条通知,邀请升级到 Windows 11 系统。只有当用户的设备符合升级条件时,才会显示此消息。微软表示,“请注意,并非所有用户都可以使用此功能,因为它将逐步推出。”

今年 2 月,微软放出了名为《Start Fresh Without Starting Over with Windows 11》的宣传视频,表示 Windows 10 用户几乎不需要额外的学习成本,可以无障碍升级使用 Windows 11 系统。微软在视频中强调用户升级 Windows 11 系统之后,对于大多数用户来说不会产生陌生感,可以熟悉地展开各项操作。

Typecho如何让网站变成灰色

· 发表评论

每当全国哀悼日或某些纪念日到来时,身为站长的我们都会把自己的网站全部网页变成灰白色,这个小小的举动能够向访问者传达我们对逝者的悼念之情。那么今天就通过几行简单的代码,来实现这个功能。

在Typecho主题的目录中找到style.css文件,把下面的代码添加进去即可。

html {
    -webkit-filter: grayscale(1);
    -webkit-filter: grayscale(100%);
    filter: grayscale(100%);
    -webkit-filter: gray;
    filter: gray;
    filter: progid: DXImageTransform.Microsoft.BasicImage(grayscale=1);
}

如果只想首页变灰,内页仍保留颜色,只需把下面的代码添加进header.php即可。

<?php if ($this->is('index')) : ?>
<style type="text/css">html{-webkit-filter:grayscale(1);-webkit-filter:grayscale(100%);filter:grayscale(100%);-webkit-filter:gray;filter:gray;filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);}</style>
<?php endif; ?>

Typecho内存不足导致的异常和错误

· 发表评论

在Typecho网站运行时,有时可能由于服务器的内存设置过小,或者Typecho主题插件比较吃内存的时候,就会出现运行内存不足的情况。我们可以通过Typecho增加php内存限制轻松修复它。

方法 1:通过Typecho增加PHP内存限制

首先,需要编辑Typecho站点上的config.inc.php文件,添加以下代码到文件最底部即可。

ini_set('memory_limit', '512M');

方法 2:增强服务器配置

解决Typecho文章内英文单词不换号溢出/换行单词断词

· 发表评论

在Typecho中文主题开发中,有时会出现一些英文排版问题,例如:长英文或长链接溢出显示范围(没有换行),或者换行导致英文单词断词,影响阅读体验。解决上述问题的方法如下:

自动换行

word-wrap: break-word;
word-break: normal;

英文单词不拆词

word-break: keep-all;
word-wrap: break-word;
white-space: pre-wrap;

英文单词两端对齐

word-break: keep-all;
word-wrap: break-word;
white-space: pre-wrap;
text-align: justify;

长图测试

Typecho添加文章字数统计和预计阅读时间

· 发表评论

za93c1-0.webp

将以下代码插入到主题中的 functions.php 文件中

function  art_count ($cid){
    $db = Typecho_Db::get ();
    $rs = $db->fetchRow ($db->select ('table.contents.text')->from ('table.contents')->where ('table.contents.cid=?',$cid)->order ('table.contents.cid',Typecho_Db::SORT_ASC)->limit (1));
    $text = preg_replace("/[^\x{4e00}-\x{9fa5}]/u", "", $rs['text']);
    $text_num = mb_strlen($text,'UTF-8');
    $read_time = ceil($text_num/400);
    $output = '本文共' . $text_num . '个字,预计阅读时间需要' . $read_time  . '分钟。';
    return $output;
}

在需要引用的地方插入如下代码

<?php _e(art_read_time($this->cid)); ?>

Typecho短代码解析功能实现

· 发表评论

WordPress短代码是一种非常简单的可以给WordPress文章、页面以及侧边栏添加动态内容的方式。许多WordPress插件和主题都会使用短代码去添加特定的内容,例如联系表单、图集、幻灯片等。

这篇文章,会为你展示如何让Typecho像WordPress一样添加短代码以及创建自己的自定义短代码。

在functions.php加入

<?php
class Content{
    public static function analysis($content)
    {
        /** 
         * 提高效率,避免每篇文章都要解析
        **/
        if (strpos($content, '[scode') !== false) {
            $pattern = self::get_shortcode_regex(array('scode'));
            $content = preg_replace_callback("/$pattern/", array('Content', 'scodeParseCallback'),
                $content);
        }
        return $content;
    }
    /**
     * 短代码解析正则替换回调函数
     * @param $matches
     * @return bool|string
     * 
     * 使用:[scode type="share"]这是灰色的短代码框,常用来引用资料什么的[/scode]
     */
    public static function scodeParseCallback($matches)
    {
        // 不解析类似 [[player]] 双重括号的代码
        if ($matches[1] == '[' && $matches[6] == ']') {
            return substr($matches[0], 1, -1);
        }
        //[scode type="share"]这是灰色的短代码框,常用来引用资料什么的[/scode]
        $attr = htmlspecialchars_decode($matches[3]);//还原转义前的参数列表
        $attrs = self::shortcode_parse_atts($attr);//获取短代码的参数
        $type = "info";
        switch ($attrs['type']) {
            case 'yellow':
                $type = "warning";
                break;
            case 'red':
                $type = "error";
                break;
            case 'lblue':
                $type = "info";
                break;
            case 'green':
                $type = "success";
                break;
            case 'share':
                $type = "share";
                break;
        }
        return '<div class="tip inlineBlock ' . $type . '">' . $matches[5] . '</div>';
    }
    /**************下面是解析功能区域,搬WordPress的,无需改动***************************/
    /**
     * 获取匹配短代码的正则表达式
     * @param null $tagnames
     * @return string
     * @link https://github.com/WordPress/WordPress/blob/master/wp-includes/shortcodes.php#L254
     */
    public static function get_shortcode_regex($tagnames = null)
    {
        global $shortcode_tags;
        if (empty($tagnames)) {
            $tagnames = array_keys($shortcode_tags);
        }
        $tagregexp = join('|', array_map('preg_quote', $tagnames));
        // WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcode_tag()
        // Also, see shortcode_unautop() and shortcode.js.
        // phpcs:disable Squiz.Strings.ConcatenationSpacing.PaddingFound -- don't remove regex indentation
        return
            '\\['            // Opening bracket
            . '(\\[?)'            // 1: Optional second opening bracket for escaping shortcodes: [[tag]]
            . "($tagregexp)"        // 2: Shortcode name
            . '(?![\\w-])'        // Not followed by word character or hyphen
            . '('            // 3: Unroll the loop: Inside the opening shortcode tag
            . '[^\\]\\/]*'        // Not a closing bracket or forward slash
            . '(?:'
            . '\\/(?!\\])'        // A forward slash not followed by a closing bracket
            . '[^\\]\\/]*'        // Not a closing bracket or forward slash
            . ')*?'
            . ')'
            . '(?:'
            . '(\\/)'            // 4: Self closing tag ...
            . '\\]'            // ... and closing bracket
            . '|'
            . '\\]'            // Closing bracket
            . '(?:'
            . '('            // 5: Unroll the loop: Optionally, anything between the opening and closing shortcode tags
            . '[^\\[]*+'        // Not an opening bracket
            . '(?:'
            . '\\[(?!\\/\\2\\])'        // An opening bracket not followed by the closing shortcode tag
            . '[^\\[]*+'        // Not an opening bracket
            . ')*+'
            . ')'
            . '\\[\\/\\2\\]'        // Closing shortcode tag
            . ')?'
            . ')'
            . '(\\]?)';            // 6: Optional second closing brocket for escaping shortcodes: [[tag]]
                        // phpcs:enable
    }
    /**
     * @param $text
     * @return array|string
     * @link https://github.com/WordPress/WordPress/blob/master/wp-includes/shortcodes.php#L508
     */
    public static function shortcode_parse_atts($text)
    {
        $atts = array();
        $pattern = self::get_shortcode_atts_regex();
        $text = preg_replace("/[\x{00a0}\x{200b}]+/u", ' ', $text);
        if (preg_match_all($pattern, $text, $match, PREG_SET_ORDER)) {
            foreach ($match as $m) {
                if (!empty($m[1])) {
                    $atts[strtolower($m[1])] = stripcslashes($m[2]);
                } elseif (!empty($m[3])) {
                    $atts[strtolower($m[3])] = stripcslashes($m[4]);
                } elseif (!empty($m[5])) {
                    $atts[strtolower($m[5])] = stripcslashes($m[6]);
                } elseif (isset($m[7]) && strlen($m[7])) {
                    $atts[] = stripcslashes($m[7]);
                } elseif (isset($m[8]) && strlen($m[8])) {
                    $atts[] = stripcslashes($m[8]);
                } elseif (isset($m[9])) {
                    $atts[] = stripcslashes($m[9]);
                }
            }
            // Reject any unclosed HTML elements
            foreach ($atts as &$value) {
                if (false !== strpos($value, '<')) {
                    if (1 !== preg_match('/^[^<]*+(?:<[^>]*+>[^<]*+)*+$/', $value)) {
                        $value = '';
                    }
                }
            }
        } else {
            $atts = ltrim($text);
        }
        return $atts;
    }

    /**
     * Retrieve the shortcode attributes regex.
     *
     * @return string The shortcode attribute regular expression
     * @since 4.4.0
     *
     */
    public static function get_shortcode_atts_regex()
    {
        return '/([\w-]+)\s*=\s*"([^"]*)"(?:\s|$)|([\w-]+)\s*=\s*\'([^\']*)\'(?:\s|$)|([\w-]+)\s*=\s*([^\s\'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|\'([^\']*)\'(?:\s|$)|(\S+)(?:\s|$)/';
    }



}

继续在functions.php加入

//短代码解析
function shortCode($content){
    //解析短代码功能
    $cons = new Content();
    
    $content = $cons->analysis($content);
    
    return  $content;
}

在post.php或者你要解析的地方加上shortCode(内容)即可;

Typecho主题模板制作快速入门教程

· 发表评论

制作Typecho主题模板并不困难,只需要熟悉HTML和CSS的基础知识,然后按照嵌套模板的方式来编写代码。只要熟悉Typecho的内部标签,就能快速完成Typecho模板的制作。

Typecho自定义头部信息输出<?php $this->header(); ?>

<?php $this->header('keywords=&generator=&template=&pingback=&xmlrpc=&wlw='); ?>

以上代码即可过滤关键词、程序、模板名称、文章引用、离线写作等信息的输出。

$this->header()参数及方法说明

keywords:关键词
description:描述、摘要
rss1:feed rss1.0
rss2:feed rss2.0
atom:feed atom
generator:程序版本
template:模板名称
pingback:文章引用
xmlrpc:离线写作
wlw:离线写作工具
commentReply:评论回复

等号(=)为空则不输出该项目,各个参数之间使用 “&” 连接。 如果需要自定义rss地址,只填上 rss2=feed订阅地址 即可。

Typecho随机背景颜色标签云

<?php $this->widget('Widget_Metas_Tag_Cloud', 'sort=mid&ignoreZeroCount=1&desc=0&limit=30')->to($tags); ?>
<ul class="tags-list">
<?php while($tags->next()): ?>
    <li><a style="background-color: rgb(<?php echo(rand(40, 255)); ?>, <?php echo(rand(90,255)); ?>, <?php echo(rand(150, 255)); ?>)" href="<?php $tags->permalink(); ?>" title='<?php $tags->name(); ?>'><?php $tags->name(); ?></a></li>
<?php endwhile; ?>
</ul>

参数说明

sort:排序方式为 mid; ignoreZeroCount:忽略文章数为 0 的; desc:是否降序输出; limit:输出数目。

Typecho获取读者墙

<?php
$period = time() - 999592000; // 時段: 30 天, 單位: 秒
$counts = Typecho_Db::get()->fetchAll(Typecho_Db::get()
->select('COUNT(author) AS cnt','author', 'url', 'mail')
->from('table.comments')
->where('created > ?', $period )
->where('status = ?', 'approved')
->where('type = ?', 'comment')
->where('authorId = ?', '0')
->group('author')
->order('cnt', Typecho_Db::SORT_DESC)
->limit(25)
);
$mostactive = '';
$avatar_path = 'http://www.gravatar.com/avatar/';
foreach ($counts as $count) {
  $avatar = $avatar_path . md5(strtolower($count['mail'])) . '.jpg';
  $c_url = $count['url']; if ( !$c_url ) $c_url = Helper::options()->siteUrl;
  $mostactive .= "<a href='" . $c_url . "' title='" . $count['author'] . " (参与" . $count['cnt'] . "次互动)' target='_blank'><img src='" . $avatar . "' alt='" . $count['author'] . "的头像' class='avatar' width='32' height='32' /></a>\n";
}
echo $mostactive; ?>

Typecho归档页面

<?php $this->widget('Widget_Contents_Post_Recent', 'pageSize=10000')->to($archives);
    $year=0; $mon=0; $i=0; $j=0;
    $output = '<div id="archives">';
    while($archives->next()):
        $year_tmp = date('Y',$archives->created);
        $mon_tmp = date('m',$archives->created);
        $y=$year; $m=$mon;
        if ($mon != $mon_tmp && $mon > 0) $output .= '</ul></li>';
        if ($year != $year_tmp && $year > 0) $output .= '</ul>';
        if ($year != $year_tmp) {
            $year = $year_tmp;
            $output .= '<h3 class="al_year">'. $year .' 年</h3><ul class="al_mon_list">'; //输出年份
        }
        if ($mon != $mon_tmp) {
            $mon = $mon_tmp;
            $output .= '<li><span class="al_mon">'. $mon .' 月</span><ul class="al_post_list">'; //输出月份
        }
        $output .= '<li>'.date('d日: ',$archives->created).'<a href="'.$archives->permalink .'">'. $archives->title .'</a> <em>('. $archives->commentsNum.')</em></li>'; //输出文章日期和标题
    endwhile;
    $output .= '</ul></li></ul></div>';
    echo $output;
?>

自定义页面列表显示条数

在functions.php写一个函数(示例是控制 news 分类下的文章列表显示条数为 10 条)

function themeInit($archive) {
    if ($archive->is('category', 'news')) {
        $archive->parameter->pageSize = 10; // 自定义条数
    }
}

自定义模板

Typecho 自定义模板,一是自定义首页模板;二是自定义页面模板;这两者方法不同,下面具体说明。

自定义首页模板

在当前模板目录下面建home.php,然后在文件的开头加上如下代码:

<?php
/**
 * 自定义首页模板
 *
 * @package index
 */

然后进入后台 设置 -> 阅读 页面,选择“站点首页”中的“直接调用[home.php]模板文件”,保存即可。

自定义页面(page)模板

只需要在当前模板目录下面建你需要的文件,比如 about.php,然后在文件的开头加上如下代码,可以自定义多个页面:

<?php
/**
 * 自定义页面模板 about
 *
 * @package custom
 */

然后进入后台 管理 -> 独立页面 自定义模板下拉菜单内就可以看到。

自定义分类模板

方法一、直接在当前模板目录下建立一个名为 category 的目录(目录可以不同,自定),然后在里面放上以你需要单独做模板分类的缩略名为文件名的 php 文件,比如 default.php,这样,在访问缩略名为default的分类时,它会自动调用这个模板。

方法二、在模板文件中使用 is 语法判断页面

<?php if ($this->is('category', 'default')): ?>
//默认分类模板
<?php endif; ?>
<?php if ($this->is('category', 'category2')): ?>
//分类2模板
<?php endif; ?>

调用某一分类下的文章

<?php $this->widget('Widget_Archive@myCustomCategory', 'type=category', 'mid=1')->to($categoryPosts); ?>

调用相关文章

<?php $this->related(5)->to($relatedPosts); ?>
    <ul>
    <?php while ($relatedPosts->next()): ?>
    <li><a href="<?php $relatedPosts->permalink(); ?>" title="<?php $relatedPosts->title(); ?>"><?php $relatedPosts->title(); ?></a></li>
    <?php endwhile; ?>
</ul>

将以上内容粘贴至你想加入相关文章的位置,最后保存即可。

相关文章函数说明和调用方法

$this->related($limits, $type);
$limits 默认值为 5,表示显示的相关文章数量
$type   默认值为 NULL,表示文章的相关方式,只接受 author。当 $type 为 author 时,根据用户显示相关文章;为其他值时,根据标签显示相关文章。

Typecho可以使用is语法判断很多东西,比如

$this->is('index');
$this->is('archive');
$this->is('single');
$this->is('page');
$this->is('post');
$this->is('category');
$this->is('tag');

再比如

$this->is('category', 'default');
$this->is('page', 'start');
$this->is('post', 1);

需要注意的是,后面的参数是分类、页面的缩略名:

<?php if ($this->is('post')) : ?>
    这里就是内容了
<?php endif; ?>

试用了20个截图工具,写下这份超全的截图软件指南

· 发表评论

之前有同学在留言区询问截图工具的问题,想到自己用过比较多截图相关的工具,于是从中整理了一下,按照最终录制的文件格式,列出了录制各种文件可能会用到的工具。

img

一、截图工具

01. 系统自带截图功能

在Windows系统中,其实自带了两个截图功能,一个是全屏截图,另外一个是窗口截图。

全屏截图的快捷键为PrtScr,当你按了这个按钮之后,截图存储在了系统的剪贴板中,如果你想要保存这张截图,需要打开一个可粘贴剪贴板图片的软件,比如PPT。

在PPT中,按Ctrl+V粘贴,就可以看到存储在剪贴板中的图片了,这时你再将图片另存到桌面即可。

而Windows中的窗口截图,需要用到系统自带的一个软件——截图工具。这个工具小巧简洁,点击左侧的新建,即可截取自定义大小的图片。

img

02. QQ/微信截图功能

说到截图工具,许多人可能本能地想起QQ/微信截图工具,因为QQ和微信作为国民级应用的存在,这两个软件自带的截图功能,可以说是无人不知,基本能满足大部分人的截图需求。

但是,这两个自带的截图功能,有一个致命的bug:需要提前启动软件。

这个致命的bug,让我开始寻找新的截图工具。

03. Snipaste

Snipaste是2016年发布的一款截图工具,基于其简洁、免费的特点,获得了很多用户的喜爱。

Snipaste目前支持Windows(从XP起)、Mac两大系统,Linux版本还在开发的路上。

img

在Windows上,Snipaste默认的截图快捷键为F1,截图时软件会根据鼠标所在的位置,自动生成对应大小的截图窗口,这一个小功能,让这个截图工具显得有些智能。

这里我想重点介绍它的贴图功能,快捷键为F3。贴图功能,是这个软件最吸引我的地方。

贴图功能,能将截图的内容转换成图片,置于桌面的顶层,不会因为打开的软件而遮挡了截图的内容。这非常适合于你需要在两个软件之间来回进行切换的场景,我举个例子:

我写作这篇文章时,用到了幕布和石墨文档这两个软件,幕布写好了文章的提纲,而石墨文档则是用于扩展提纲的内容,写作的过程中,我需要不时地切换到幕布,来查看整篇文章的提纲,操作的次数多了,在一定程度上降低了我的效率。

这时如果我用了Snipaste的贴图,它应该是这样的:

img

幕布写好的文章框架,“悬浮”在了石墨文档的上方(左侧),在石墨写作文章的时候,就可以时不时地把视线移到左侧的幕布,对照提纲的内容,而不需要在两个软件之间来回切换。

当然,贴图的使用场景还有很多,比如做临时备忘,拼图(可以有多个贴图并存),做参考图,做录屏的水印等。

Snipaste是目前我在用的主力截图软件,但美中不足的是,它缺少了一个滚动截图的功能,即不能截取长图,这让我又开始寻找新的截图软件。

Snipaste下载地址:

https://www.snipaste.com

04. FastStone Capture

试用了几个可以截取长图的软件后,我留下了FastStone Capture。

FastStone Capture是一款功能齐全的图像捕捉工具,除了可以用来截取长图,还可以用来截取手绘区域和录制视频。

截取长图默认的快捷键为Ctrl+Alt+PrtScr,三个按键按起来比较费劲,你可以在设置中自行修改快捷键。

img

当你截取长图时,观察截图窗口的右下角,软件会提示有两种截取长图的方式,分别是自动滚动和自定义滚动,你可以根据情况进行选择。

下图是我用FastStone Capture截取的一周进步官网图片,大家可以感受一下:

img

二、Gif录制工具

录制Gif,对一些人来说,也是一个强需求,比如你想将一个视频片段截取成表情包,或者将原本不是无限循环的动画制作成循环动画等。

熟悉一周进步的朋友,可能对接下来要介绍的Gif录制工具并不陌生。

是的,我想推荐的Gif录制工具是ScreenToGif。

作为一个用过付费Gif录制工具的人,开源的ScreenToGif简直太良心了,相比下来,付费的Gif录制工具并没有出众之处。

img

录制Gif之前,你可以设置Gif的帧率,帧率越大,录制出来的Gif图越流畅,相应地文件就越大。

img

录制的快捷键为F7,停止录制的快捷键为F8。

导出Gif图之前,你可以通过右侧的选项栏,调整Gif的质量或颜色,来调整最终导出的Gif图的大小。

img

ScreenToGif下载地址:

https://github.com/NickeManarin/ScreenToGif/release

三、视频录制工具

至于视频录制工具,网络上有很多工具可供选择,这些工具大致分成两派,一派是免费的,但录制出来的视频大多有水印,另一派则是收费的,但收费的软件其实有好友坏,需要你用心去甄别。

01. Xbox控制台小帮手

这是Win10自带的视频录制工具,这个工具最开始的设计意图,是为了让用户记录玩游戏时的画面,但如果用它来录制其它视频,你也会发现,真香!

img

在打开任何一个软件的情况下,按Win+G,可以快速打开录制面板,如下图,面板的第一个按钮,可以用来截图,第二和第三个按钮则是用来录制视频的,这两个按钮存在着一点区别。

前者可以用来录制你还未点击录制按钮之前的画面,这个功能显得比较神奇,而后者则是只有你点了录制按钮,它才开始录制。

img

视频录制完成后,会跳转到Xbox控制台小帮手的窗口,在捕获窗口中,你可以对视频进行简单的编辑。

img

Win10自带的录屏工具,可以说是基本能满足大家的录屏需求,但它也存在一些缺点:只能录制一个软件窗口,录制时不能切换到其他软件中;不能自定义录制的视频的长度和宽度。

02. OBS

基于Win10自带的录屏工具存在的缺点,我又开始找寻新的录屏软件,直到我遇见了它。

OBS全称是Open Boardcaster Software,这里的Open是开源的意思,意味着大家可以免费使用这个软件,Boardcaster则是因为这个软件最开始是用于直播的,但它也可以用来录制视频。软件支持Windows、Mac和Linux三种操作系统。

img

OBS可以说是完美地解决了Win自带的录屏工具存在的缺点,它可以自定义录制的视频尺寸、设置最终导出的视频质量及导出格式。

当你要进行录制时,需要先创建录制窗口,点击来源面板左下角的加号,选择显示器捕获,点击两次确定,就完成了录制窗口的创建。

img

完成录制窗口的创建后,需要对录制的窗口大小进行调整,如下图,软件内的红色边框即为录制窗口的边缘,完成窗口大小的调整后,点击右边的开始录制,即可开始录制视频。

img

OBS下载地址:https://obsproject.com

03.Camtasia

如果你录制的视频仅限于个人观看,或许上面介绍的录屏工具,已经能满足你的需求了。而如果你是一名视频Up主或者课程讲师,你可能对视频录制工具有着更高的要求:不仅能录制视频,还要能加特效,比如为两个视频的衔接添加转场效果。

Camtasia可以说很好地做到了这两者的平衡,它的录制视频功能和上面提到的软件基本一致,我们暂且不说,这里着重介绍它的视频编辑功能。

img

Camtasia自带的编辑功能,使用起来也非常友好,适合刚接触视频编辑的朋友。你可以用它很方便地为视频添加字幕、文本动画、转场效果以及页面的缩放效果。

img

Camtasia虽然很好用,但它是一个付费软件,大家可以根据自己的需要进行购买。

四、全能型工具

看完了前面介绍的三类工具,你可能会问我:有没有集前面三种功能于一身的工具?

我会和你说:还真的有。

ShareX就是这么一个工具,可以用来截图、录制gif和录制视频,可以称得上图像捕捉工具中的全能选手。

一个软件集齐了三种功能,这还不是最令人震惊的。最震惊的是,一个这么好用的工具,它竟然是免费的。

img

除了上面提到的功能,ShareX还有其他一些特色功能,比如:

为截图添加水印
为截图添加阴影
对本地图片进行简单编辑
OCR识别图片中的文字

这里重点介绍一下,为截图添加阴影的方法:

在ShareX主界面,点击左侧的任务设置,在弹出的窗口中,点击效果,选择图像效果的配置。

img

默认的图像效果中没有阴影,你需要点击添加---过滤器---Shadow,软件就会自动生成一个阴影的预设。如果你对阴影效果不满意,可以改变阴影的参数,如下图,我增加了阴影的大小。

img

完成阴影效果的设置后,你还需要将阴影效果打开。打开的方法为:在桌面的右下角找到ShareX的图标,右击ShareX,找到截图后---添加图片特效/水印,左键点击添加图片特效/水印,就成功打开了阴影效果。

img

这时,我们再用ShareX进行截图,就可以看到截图真的有了阴影!这样一来,以后你就不需要再借助其他软件,来给截图添加阴影了,这样的一条龙服务,真香!

img

ShareX下载地址:https://getsharex.com/

此外,这个软件推出了UWP版本,你也可以通过Microsoft Store进行下载。

写在最后

这篇文章介绍了多个图像捕捉相关的工具,大家在实际使用时,可以结合自己的需求,从中挑选趁手的工具,可以只选用一个工具,也可以选择其中两三个搭配使用。