Rでお遊び:アニメ「シャーロット」放送開始記念バナー広告のカラーコード

Rの解析に役に立つ記事

本日、2015/7/4にアニメ「シャーロット」が遂に放送開始されます。「からだにいいもの」にも放送開始記念バナー広告が表示されました。

スクリーンショット 2015-07-04 5.30.08

スクリーンショット

思わず、画像をダウンロードしてカラーコードを解析しましたので紹介します。でも、髪の色がなぜか紫です。

また、オフィシャルサイトでは最終回までのサブタイトルが公開されています。第11話に「シャーロット」、第12話には初期のオフィシャルサイトでコピーの一部に使用されていた「約束」が設定されています。

最終13話につながる流れとして期待が高まります。本日の放送される第1話が楽しみです。

シャーロットHP:http://charlotte-anime.jp/
TVアニメ「Charlotte(シャーロット)」公式サイト

紹介コードはR version 3.2.0で動作を確認しています。

スポンサーリンク
スポンサーリンク

結果

<使用カラーTop200のパレット画像>

シャーロットカラーコード降順

<使用カラーTop200のカラーコードテーブル>
モバイルの方はこちらからご覧いただくと見やすいです。
別ウィンドウで開く


実行コマンドの紹介

下記コマンドを実行してください。詳細はコメントを確認してください。

#パッケージのインストール
#install.packages(c("png", "jpeg", "colorspace", "DT"))

#パッケージの読み込み
library("tcltk")
library("png")
library("jpeg")
library("progress")
library("colorspace")

#読み込みフォルダを選択
FoldPath <- paste(as.character(tkchooseDirectory(title = "読み込みフォルダを選択"), sep = "", collapse =""))

#フォルダ内のアイテムを取得
ItemList <- list.files(path = FoldPath)

###S:フォルダ内の全画像からカラーコードを取得#####
#データ格納用の変数を初期化
MasterRGBCol <- NULL

#アイテム数の取得
ItemVol <- length(ItemList)

#プログレスバーの設定
pb <- progress_bar$new(format = "  処理状況 [:bar] :percent",
                       total = ItemVol, clear = FALSE, width= 60)

for(i in seq(ItemVol)){
  #プログレスバーの表示
  pb$tick()
  
  #Imageファイルの読み込み
  selectAImage <- paste(FoldPath, "/", ItemList[i],
                        sep = "", collapse = "")
  
  #jpeg/png/gifファイルの判断
  if (unlist(strsplit(ItemList[i], "\\."))[2] == "png"){
    
    Image <- readPNG(selectAImage)
    LABCol <- as(RGB(as.vector(Image[,, 1]), as.vector(Image[,, 2]), as.vector(Image[,, 3])), "LAB")
    RGBCol <- cbind(LABCol@coords[,1:3], hex(LABCol))
    
  }else{
    
    Image <- readJPEG(selectAImage, native = FALSE)
    LABCol <- as(RGB(as.vector(Image[,, 1]), as.vector(Image[,, 2]), as.vector(Image[,, 3])), "LAB")
    RGBCol <- cbind(LABCol@coords[,1:3], hex(LABCol))
    
  }
  
  #マスターデータのデータフレーム化
  RGBCol <- as.data.frame(RGBCol)
  
  #特定の色を削除。白色を削除
  RGBCol <- subset(RGBCol, RGBCol[, 4] != "#FFFFFF")
  
  #カラーコードを文字列化
  RGBCol[, 4] <- as.character(RGBCol[, 4])
  
  #画像で使用されているカラーコードを集計
  CountColor <- as.data.frame(table(RGBCol[, 4]))
  
  #集計データをカラーコードで並び替え
  CountColor <- CountColor[order(CountColor[, 1], decreasing = TRUE), ]
  
  #マスターデータの重複を削除
  RGBCol <- RGBCol[!duplicated(RGBCol[, 4]),]
  
  #マスターデータをカラーコードで並び替え
  RGBCol <- RGBCol[order(RGBCol[, 4], decreasing = TRUE),]
  
  #結合
  RGBCol <- cbind(formatC(i, width = 2, flag = "0"), ItemList[i], RGBCol, CountColor[, 2])
  
  #プロットデータの作成
  MasterRGBCol <- rbind(MasterRGBCol, RGBCol)
  
  #必要のないImage,LABCol,RGBColの削除
  rm(Image,LABCol,RGBCol)
  
}

#行名の付与
colnames(MasterRGBCol) <- c("NO", "ファイル名", "明度:l", "補色次元:a", "補色次元:b", "カラーコード", "出現数")

#ファイルの保存、解析画像数によってはファイルサイズが非常に大きい場合があります
#また、エクセルなどで読み込めないことがあるのでコメントアウトしています。
#setwd(paste(as.character(tkchooseDirectory(title = "保存場所を選択"), sep = "", collapse ="")))
#write.csv(MasterRGBCol, "分析結果.csv", fileEncoding = "CP932", eol = "\r\n")
###E:フォルダ内の全画像からカラーコードを取得#####


###データのプロット#####
#軸の設定
xRange <- seq(0, 1, by = 1/ItemVol)

#グラフ幅の設定
xWidth <- seq(1/ItemVol, 1, by = 1/ItemVol)

#プロット領域の作成
par(bg = "#2E2E2E")
#plot(0:max(c(xRange, xWidth)), 0:max(c(xRange, xWidth)), type = "n", axes = FALSE, xlab = "", ylab = "")
plot(0:1, 0:1, type = "n", axes = FALSE, xlab = "", ylab = "")
box()

#プログレスバーの設定
pb <- progress_bar$new(format = "  処理状況 [:bar] :percent",
                       total = length(ItemVol), clear = FALSE, width= 60)

#テーブル作成用のデータ格納用変数
TableDrowData <- NULL

for(k in seq(ItemVol)){
  #プログレスバーの表示
  pb$tick()
  
  #データの抽出
  Plot <- subset(MasterRGBCol, MasterRGBCol[, 2] == ItemList[k])
  
  #出現数で並び替えてTOP20を抽出
  Plot <- Plot[order(as.vector(Plot[, 7]), decreasing = TRUE),]
  Plot <- head(Plot, n = 200)
  
  #プロット内容の指定
  #明度で並び替え
  #行番号を指定することで並び替えの基準を変更できます
  #3行目"明度:l", 4行目"補色次元:a", 5行目"補色次元:b", 6行目"カラーコード"
  Plot <- Plot[order(as.vector(Plot[, 6]), decreasing = TRUE),]
  
  #テーブル作成用データ
  TableDrowData <- rbind(TableDrowData, Plot[, c(6, 7)])
  
  #データのプロット
  rasterImage(as.raster(Plot[, 6]),
              xRange[k], 0, xWidth[k], 1, interpolate = FALSE)
  
}

#色付きJavaテーブルの作成
#パッケージの読み込み
library("DT")

#HTMLファイルの保存場所を指定
setwd(paste(as.character(tkchooseDirectory(title = "保存場所を選択"), sep = "", collapse ="")))

#テーブル内容を降順で並び替え
TableDrowData <- TableDrowData[order(as.vector(TableDrowData[, 1]), decreasing = TRUE),]

#テーブルの作成
DataTable <- datatable(TableDrowData, rownames = FALSE, options = list(pageLength = 10, lengthMenu = c(5, 50, 100, 200)),
                       caption = 'シャーロット 放送開始記念広告 カラーパレット', escape = FALSE)

#キャラ名のセルの色をパイプ"%>%"でつなげてformatStyleで設定します
DataTable <- DataTable %>% formatStyle('カラーコード',
                                       backgroundColor = styleEqual(TableDrowData[, 1], TableDrowData[, 1]))
#作成テーブルをhtmlで出力
saveWidget(DataTable, 'DataTable.html')

少しでも、あなたのアニメ生活が充実しますように!!

タイトルとURLをコピーしました