getContrastColorFromNetworkImage method

Future<Color?> getContrastColorFromNetworkImage(
  1. String imageUrl
)

Implementation

Future<Color?> getContrastColorFromNetworkImage(String imageUrl) async {
  try {
    final response =
        await dio.Dio().get<Uint8List>(imageUrl, options: dio.Options(responseType: dio.ResponseType.bytes));
    final imageData = response.data;
    if (imageData != null) {
      int pixelCount = imageData.length ~/ 4;
      int r = 0, g = 0, b = 0;

      // 计算像素数据的总和
      for (int i = 0; i < pixelCount; i++) {
        int pixelColor = Uint8List.view(imageData.buffer, i * 4, 4).buffer.asByteData().getUint32(0, Endian.little);
        r += (pixelColor >> 16) & 0xFF;
        g += (pixelColor >> 8) & 0xFF;
        b += (pixelColor >> 0) & 0xFF;
      }

      // 计算平均颜色
      int averageR = r ~/ pixelCount;
      int averageG = g ~/ pixelCount;
      int averageB = b ~/ pixelCount;

      // 计算反差色
      int contrastR = 255 - averageR;
      int contrastG = 255 - averageG;
      int contrastB = 255 - averageB;

      return Color.fromARGB(255, contrastR, contrastG, contrastB);
    }
  } catch (e) {
    debugPrint('load fail $imageUrl');
  }
  return null;
}