Flutter图片搜索插件flutter_saucenao_img_search的使用

Flutter图片搜索插件flutter_saucenao_img_search的使用

Introduction(简介)

这是一个方便在Flutter/Dart中使用SauceNAO API的方式。

Quick start(快速开始)

Install(安装)

一种方便将此包添加到项目中的方法是在项目中运行 pub 命令:

flutter pub add flutter_saucenao_img_search

此外,你还可以通过更新 Flutter 项目的 pubspec.yaml 文件来添加包依赖:

dependencies:
  ...
  flutter_saucenao_img_search:
    git:
      url: https://github.com/nfnfgo/flutter_saucenao_img_search.git
      ref: main

在更新 pubspec.yaml 文件后,你可能需要重启你的IDE。

Search Picture by URI(通过URI搜索图片)

以下是一个通过URI搜索图片的示例代码:

import 'package:flutter_saucenao_img_search/flutter_saucenao_img_search.dart';
import 'package:flutter_test/flutter_test.dart';

void main() async {
  {
    // 创建 ImageSearcher 实例
    ImageSearcher imgSearcher = ImageSearcher(
      searcherConfig: ImageSearcherConfig(
        // 使用你自己的SauceNAO API密钥替换此处
        apiKey: 'YOUR_API_KEY_HERE'),
    );

    // 通过URI搜索图片
    SearchResult? result = await imgSearcher.uri(
      uriStr:
          'https://pbs.twimg.com/media/FmWFWu4agAEGo7P?format=jpg&name=large',
    );

    if (result != null) {
      for (SearchResultItem resultItem in result.resultItemsList) {
        print('-----------------------------------------------');
        print('缩略图: ${resultItem.thumbnailLink}');
        // 实际上,resultItemsList 中的项可能是 SearchResultItem 的子类型,例如 PixivSearchResultItem,它包含特定平台的更多信息
        if (resultItem is PixivSearchResultItem) {
          print('Pixiv ID: ${resultItem.pixivId}');
          print('Pixiv 用户页面: ${resultItem.artistLink}');
        }
        print('来源链接: ${resultItem.sourceLinksList}');
      }
    }
  }
}

如果在Dart中运行上述代码,你可以得到以下输出:

缩略图: https://img1.saucenao.com/res/pixiv/10449/manga/104491469_p1.jpg?auth=ZpchuXwRGpw9dYG3BvU-zg&exp=1674590400
Pixiv ID: 104491469
Pixiv 用户页面: https://www.pixiv.net/users/212801
来源链接: [https://www.pixiv.net/member_illust.php?mode=medium&illust_id=104491469]
-----------------------------------------------
缩略图: https://img3.saucenao.com/booru/0/6/0689c9516d7e95987e34820ece877cd4_2.jpg?auth=luScLjJjXOP6MJ1OHKFWzQ&exp=1674590400
来源链接: [https://danbooru.donmai.us/post/show/5979370, https://yande.re/post/show/1054789, https://gelbooru.com/index.php?page=post&s=view&id=8128874]
-----------------------------------------------
缩略图: https://img3.saucenao.com/booru/d/1/d150c1887bd1e0a33a4e014cdca712ba_2.jpg?auth=8n5L2vv1CAitOUWfYWp2JA&exp=1674590400
来源链接: [https://danbooru.donmai.us/post/show/5979362, https://gelbooru.com/index.php?page=post&s=view&id=8128881]

Search Pictures By File(通过文件搜索图片)

如果你想在本地设备上搜索图片,可以使用 ImageSearcher.file() 方法。只需将以下代码示例中的文件路径替换为你自己的文件路径:

SearchResult? result = await imgSearcher.file(
  File(r'YOUR_FILE_PATH_HERE'),
);

更多关于Flutter图片搜索插件flutter_saucenao_img_search的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter图片搜索插件flutter_saucenao_img_search的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_saucenao_img_search 是一个用于在 Flutter 应用中通过图片进行搜索的插件,它基于 SauceNAO 的 API。SauceNAO 是一个反向图片搜索引擎,可以帮助用户找到图片的来源、相关信息等。

使用步骤

  1. 添加依赖pubspec.yaml 文件中添加 flutter_saucenao_img_search 依赖:

    dependencies:
      flutter:
        sdk: flutter
      flutter_saucenao_img_search: ^1.0.0  # 请使用最新版本
    

    然后运行 flutter pub get 来安装依赖。

  2. 获取 API Key 你需要在 SauceNAO 网站上注册一个账户并获取 API Key。

  3. 初始化插件 在你的 Dart 代码中导入插件并初始化它:

    import 'package:flutter_saucenao_img_search/flutter_saucenao_img_search.dart';
    
    final saucenao = FlutterSaucenaoImgSearch(apiKey: 'your_api_key_here');
    
  4. 搜索图片 使用 searchImage 方法进行图片搜索。你可以传入图片的 URL 或本地文件路径:

    void searchImage() async {
      try {
        final result = await saucenao.searchImage(
          imageUrl: 'https://example.com/image.jpg',
          // 或者使用本地文件路径
          // filePath: '/path/to/local/image.jpg',
        );
    
        // 处理搜索结果
        print('搜索结果: ${result.results}');
      } catch (e) {
        print('搜索失败: $e');
      }
    }
    
  5. 处理搜索结果 搜索结果通常包含图片的来源、相似度、标题、作者等信息。你可以根据需要进行处理和展示。

    void processResults(List<SaucenaoResult> results) {
      for (var result in results) {
        print('相似度: ${result.similarity}');
        print('标题: ${result.title}');
        print('作者: ${result.author}');
        print('来源: ${result.source}');
        print('链接: ${result.url}');
      }
    }
    

示例代码

以下是一个完整的示例代码,展示了如何使用 flutter_saucenao_img_search 插件进行图片搜索:

import 'package:flutter/material.dart';
import 'package:flutter_saucenao_img_search/flutter_saucenao_img_search.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter SauceNAO 图片搜索示例',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final saucenao = FlutterSaucenaoImgSearch(apiKey: 'your_api_key_here');
  List<SaucenaoResult> results = [];

  void searchImage() async {
    try {
      final result = await saucenao.searchImage(
        imageUrl: 'https://example.com/image.jpg',
      );

      setState(() {
        results = result.results;
      });
    } catch (e) {
      print('搜索失败: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter SauceNAO 图片搜索示例'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: searchImage,
              child: Text('搜索图片'),
            ),
            Expanded(
              child: ListView.builder(
                itemCount: results.length,
                itemBuilder: (context, index) {
                  final result = results[index];
                  return ListTile(
                    title: Text(result.title ?? '无标题'),
                    subtitle: Text('相似度: ${result.similarity}%'),
                    onTap: () {
                      if (result.url != null) {
                        // 打开链接
                        // 可以使用 url_launcher 插件来打开链接
                      }
                    },
                  );
                },
              ),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部