ການພິມລາຍຊື່ຮູບພາບທີ່ມີປ້າຍສີ

ຕົວຢ່າງທຳອິດໄດ້ສະແດງໃຫ້ເຫັນພື້ນຖານຂອງ lua ແລະ ຊ່ວຍໃຫ້ພວກເຮົາກວດສອບວ່າທຸກຢ່າງເຮັດວຽກໄດ້ດີ. ບາດນີ້ມາລອງເຮັດສິ່ງທີ່ຊັບຊ້ອນກວ່ານັ້ນໜ້ອຍໜຶ່ງ. ມາລອງພິມລາຍຊື່ຮູບພາບທີ່ມີປ້າຍສີ “ແດງ” ຕິດຢູ່. ແຕ່ກ່ອນອື່ນໝົດ, ຮູບພາບແມ່ນຫຍັງ?

local darktable = require "darktable"
local debug = require "darktable.debug"
print(darktable.debug.dump(darktable.database[1]))

ການໃຊ້ລະຫັດຂ້າງເທິງຈະໃຫ້ຜົນລັດອອກມາຫຼາຍຫຼາຍ. ພວກເຮົາຈະມາເບິ່ງມັນໃນອີກຈັກໜ້ອຍ, ແຕ່ກ່ອນອື່ນມາເບິ່ງທີ່ຕົວລະຫັດກ່ອນ.

ພວກເຮົາຮູ້ຈັກ require darktable ແລ້ວ. ໃນທີ່ນີ້, ພວກເຮົາຕ້ອງ require darktable.debug ແຍກຕ່າງຫາກ ເຊິ່ງເປັນສ່ວນເສີມຂອງ API ທີ່ໃຫ້ຟັງຊັນຊ່ວຍເຫຼືອໃນການແກ້ໄຂຈຸດບົກພ່ອງ (debug) ຂອງສະຄຣິບ lua.

darktable.database ແມ່ນຕາຕະລາງທີ່ API ຈັດຫາໃຫ້ ເຊິ່ງປະກອບດ້ວຍຮູບພາບທັງໝົດໃນຖານຂໍ້ມູນ library. ແຕ່ລະລາຍການໃນຖານຂໍ້ມູນແມ່ນວັດຖຸຮູບພາບ (image object). ວັດຖຸຮູບພາບແມ່ນວັດຖຸທີ່ຊັບຊ້ອນ ເຊິ່ງຊ່ວຍໃຫ້ທ່ານຈັດການຮູບພາບຂອງທ່ານໄດ້ໃນຫຼາຍວິທີ (ທັງໝົດມີລາຍລະອຽດໃນສ່ວນ types_dt_lua_image_t ຂອງຄູ່ມື API). ເພື່ອສະແດງຮູບພາບຂອງພວກເຮົາ, ພວກເຮົາໃຊ້ darktable.debug.dump ເຊິ່ງເປັນຟັງຊັນທີ່ຈະຮັບຄ່າໃດກໍໄດ້ເປັນພາຣາມິເຕີ ແລະ ສະແດງເນື້ອໃນຂອງມັນອອກມາທັງໝົດ. ເນື່ອງຈາກຮູບພາບເປັນວັດຖຸທີ່ຊັບຊ້ອນ ແລະ ອ້າງອີງເຖິງວັດຖຸອື່ນໆ, ຜົນລັດທີ່ໄດ້ຈຶ່ງມີຂະໜາດໃຫຍ່ຫຼາຍ. ຂ້າງລຸ່ມນີ້ແມ່ນຕົວຢ່າງຂອງຜົນລັດທີ່ຖືກຕັດໃຫ້ສັ້ນລົງ.

toplevel (ຂໍ້ມູນຜູ້ໃຊ້,dt_lua_image_t) : /images/100.JPG
   publisher (ຂໍ້ຄວາມ) : ""
   path (ຂໍ້ຄວາມ) : "/images"
   move (ຟັງຊັນ)
   exif_aperture (ຕົວເລກ) : 2.7999999523163
   rights (ຂໍ້ຄວາມ) : ""
   make_group_leader (ຟັງຊັນ)
   exif_crop (ຕົວເລກ) : 0
   duplicate_index (ຕົວເລກ) : 0
   is_raw (ບູລີນ) : false
   exif_iso (ຕົວເລກ) : 200
   is_ldr (ບູລີນ) : true
   rating (ຕົວເລກ) : 1
   description (ຂໍ້ຄວາມ) : ""
   red (ບູລີນ) : false
   get_tags (ຟັງຊັນ)
   duplicate (ຟັງຊັນ)
   creator (ຂໍ້ຄວາມ) : ""
   latitude (ຫວ່າງເປົ່າ)
   blue (ບູລີນ) : false
   exif_datetime_taken (ຂໍ້ຄວາມ) : "2014:04:27 14:10:27"
   exif_maker (ຂໍ້ຄວາມ) : "Panasonic"
   drop_cache (ຟັງຊັນ)
   title (ຂໍ້ຄວາມ) : ""
   reset (ຟັງຊັນ)
   create_style (ຟັງຊັນ)
   apply_style (ຟັງຊັນ)
   film (ຂໍ້ມູນຜູ້ໃຊ້,dt_lua_film_t) : /images
      1 (ຂໍ້ມູນຜູ້ໃຊ້,dt_lua_image_t): .toplevel
      [......]
   exif_exposure (ຕົວເລກ) : 0.0062500000931323
   exif_lens (ຂໍ້ຄວາມ) : ""
   detach_tag (ຟັງຊັນ): toplevel.film.2.detach_tag
   exif_focal_length (ຕົວເລກ) : 4.5
   get_group_members (ຟັງຊັນ): toplevel.film.2.get_group_members
   id (ຕົວເລກ) : 1
   group_with (ຟັງຊັນ): toplevel.film.2.group_with
   delete (ຟັງຊັນ): toplevel.film.2.delete
   purple (ບູລີນ) : false
   is_hdr (ບູລີນ) : false
   exif_model (ຂໍ້ຄວາມ) : "DMC-FZ200"
   green (ບູລີນ) : false
   yellow (ບູລີນ) : false
   longitude (ຫວ່າງເປົ່າ)
   filename (ຂໍ້ຄວາມ) : "100.JPG"
   width (ຕົວເລກ) : 945
   attach_tag (ຟັງຊັນ): toplevel.film.2.attach_tag
   exif_focus_distance (ຕົວເລກ) : 0
   height (ຕົວເລກ) : 648
   local_copy (ບູລີນ) : false
   copy (ຟັງຊັນ): toplevel.film.2.copy
   group_leader (ຂໍ້ມູນຜູ້ໃຊ້,dt_lua_image_t): .toplevel

ຢ່າງທີ່ພວກເຮົາເຫັນ, ຮູບພາບໜຶ່ງມີຟີວຈຳນວນຫຼາຍທີ່ໃຫ້ຂໍ້ມູນທຸກປະເພດກ່ຽວກັບມັນ. ໃນທີ່ນີ້, ພວກເຮົາສົນໃຈປ້າຍສີ “ແດງ”. ຟີວນີ້ເປັນຄ່າ boolean (ຈິງ/ບໍ່ຈິງ), ແລະ ເອກະສານບອກວ່າພວກເຮົາສາມາດຂຽນຄ່າລົງໄປໄດ້. ຕອນນີ້ພວກເຮົາພຽງແຕ່ຕ້ອງຊອກຫາຮູບທັງໝົດທີ່ມີຟີວນີ້ ແລະ ພິມພວກມັນອອກມາ:

darktable = require "darktable"
for _,v in ipairs(darktable.database) do
  if v.red then
    print(tostring(v))
  end
end

ລະຫັດນີ້ຄວນຈະເຂົ້າໃຈໄດ້ງ່າຍໃນຕອນນີ້, ແຕ່ມັນກໍມີບາງແງ່ມຸມທີ່ໜ້າສົນໃຈຂອງ lua ທີ່ຄວນເນັ້ນ:

  • ipairs ແມ່ນຟັງຊັນມາດຕະຖານຂອງ lua ທີ່ຈະວົນຊ້ຳ (iterate) ຜ່ານດັດຊະນີຕົວເລກທັງໝົດຂອງຕາຕະລາງ. ພວກເຮົາໃຊ້ໃນທີ່ນີ້ເພາະຖານຂໍ້ມູນຂອງ darktable ມີດັດຊະນີທີ່ບໍ່ແມ່ນຕົວເລກ ເຊິ່ງເປັນຟັງຊັນສຳລັບຈັດການຖານຂໍ້ມູນເອງ (ຕົວຢ່າງ: ການເພີ່ມ ຫຼື ລຶບຮູບພາບ).

  • Iterating through a table will return both the key and the value used. It is conventional in lua to use a variable named “_” to store values that we don’t care about.

  • ໝາຍເຫດວ່າພວກເຮົາໃຊ້ຟັງຊັນ lua ມາດຕະຖານ tostring ໃນທີ່ນີ້ ແລະ ບໍ່ແມ່ນ darktable.debug.dump. ຟັງຊັນມາດຕະຖານຈະສົ່ງຄືນຊື່ຂອງວັດຖຸ ໃນຂະນະທີ່ຟັງຊັນ debug ຈະພິມເນື້ອໃນອອກມາ. ຟັງຊັນ debug ຈະໃຫ້ຂໍ້ມູນຫຼາຍເກີນໄປໃນກໍລະນີນີ້. ຢ້ຳອີກຄັ້ງ, ມັນເປັນເຄື່ອງມື debug ທີ່ດີ ແຕ່ບໍ່ຄວນໃຊ້ເພື່ອຈຸດປະສົງອື່ນ.

translations